← the shelf

Using Story Cards

The complete path: blank project → written story → framed shots → performance → a published, narrated slideshow. Twenty minutes the first time; much faster after.

1Start a project

2Write the cards

3Give every card an image

4Cut a multi-shot beat

One beat, several shots: his face → the empty bench → his face again, closer.

5Motion and marks

6Perform it

7Narrate it — your own voice

  1. List the steps and their lines: python3 tools/attach-audio.py stories/<slug>/index.html --list (this runs on the exported file — see step 9)
  2. Record while you perform. Perform mode is your teleprompter — start a recorder (Voice Memos, or QuickTime → File → New Audio Recording), play the story, and read one take per step.
  3. Name the files step-00.m4a, step-01.m4a… to match the list, and drop them in the story's audio/ folder.
  4. Attach and redeploy: python3 tools/attach-audio.py stories/<slug>/index.html

Steps without a recording fall back to device TTS — you can voice just the title card and let TTS carry the rest, or silence a step by leaving it out and muting 🔊.

8Narrate it — Google TTS

Prefer a generated narrator? The 🔊 button normally uses the viewer's device voice — quality varies. Instead, pre-generate the audio once with Google's Gemini TTS and bake it into the story; the player automatically prefers real audio. (Runs on the exported file — see step 9.)

  1. Get a free API key at aistudio.google.com/apikey.
  2. In Terminal:
export GEMINI_API_KEY="your-key"
python3 tools/narrate.py stories/the-640/index.html
# pick a different voice:
python3 tools/narrate.py stories/the-640/index.html --voice Charon

9Export

Book icon → three exports:

10Publish to the shelf

  1. Export the slideshow; make a folder stories/<your-slug>/ in the shelf repo and save it as index.html.
  2. Copy the OG <meta> block from The 6:40's file into yours (swap title, logline, cover) so links unfurl nicely.
  3. Recorded or generated narration? Run the step-7/8 tool on this exported file now.
  4. Copy and edit meta.json; add a card for it on the gallery page.
  5. Deploy:
cd EA/cards-shelf
CLOUDFLARE_ACCOUNT_ID=<personal-account-id> npx wrangler pages deploy . \
  --project-name=cards-shelf --branch=main --commit-dirty=true

These four steps are exactly what the future in-app Publish button will do in one click.