Making a 5-minute history of the fax with Claude Code, HyperFrames and Gemini TTS
I made a 5-minute explainer about the history of the fax machine without opening a video editor. Claude Code did the research, wrote every scene as HTML, and HyperFrames rendered it to MP4 on my own machine. Gemini read the narration.
These are the steps, with the prompts I typed (typos included) and how long Claude worked on each one, measured from my prompt to its last reply.
| Step | Claude’s time |
|---|---|
| Research | 28 min |
| Story | 3 min |
| Picture (13 scenes) | 34 min |
| Voice, first pass | 8 min |
| Voice, one take | 12 min |
| YouTube text and thumbnail | 2 min |
| Total | about 1 h 27 min |
Rendering the 5 minutes took another 3 minutes on my PC.
1. Research
Can you start taking the history of the fax machine from https://en.wikipedia.org/wiki/Fax and related articles on Wikipedia and other places and compile them? Both images and text. […] Make a few folders and organize the content and research that you find
Claude pulled 51 Wikipedia articles and 110 Wikimedia Commons images with their licences through the Wikipedia and Commons APIs, plus a few recordings: a fax handshake, a radiofax signal, modems. A second agent covered sources outside Wikipedia: books, IEEE pages and museums, plus 13 public-domain patent drawings and magazine scans. The output was folders of notes, a timeline, a fact-check list and a credits file.
28 minutes: 21 for the first pass, then 6 to fold in the second agent’s findings when it finished.
2. Story
With the HyperFrames plugin installed in Claude Code:
Using /hyperframes:hyperframes make a 5 min about the history fo the Fax machine
It pitched three storylines and recommended one: a single page travelling through every fax machine in history. I asked for a twist, using a 7-beat story map: hook, old way, new rule, mechanism, proof, payoff, action. The twist became the thesis: the first fax was digital. Bain’s 1843 machine sent dots that were on or off. Fax went analog for a century to carry photos, and came back to dots in 1980.
3 minutes: 2 for the three storylines, under 1 for the story map.

3. Picture
looks great. go ahead. only video first. we’ll add the voice after
- A Python script turned the archive images into a fax look: 1-bit dots for anything after 1980, greyscale for the analog years. It also drew a spectrogram of the real fax handshake recording.
- Claude wrote a
SPEC.mdwith every shot, its timing and its on-screen copy, plus a list of banned AI-video clichés. - Claude built the first scene itself. Four subagents built the other 12 in parallel. Each scene is an HTML file animated with GSAP.
hyperframes checkcaught layout and timing problems, andhyperframes snapshot --reviewmade contact sheets of every scene and cut to look at.
34 minutes, most of it the four subagents working in parallel for 10 to 21 minutes each.

4. Voice
should we generate the speech now and add it to the preview? use gemini 3.8 tts
- Claude wrote a script of about 30 lines that explains around the on-screen text instead of reading it out.
- The HyperFrames audio engine generated the lines with
gemini-3.8-flash-tts(voice Charon) and my Gemini API key. - The first pass came to 284 seconds of speech, too long for the picture. Claude shortened 16 lines and regenerated them. It didn’t stretch the scenes.
- Each line sits in its scene as its own
<audio>. The fax and modem recordings play quieter under the voice.
8 minutes.
can you regenerate the audios using the same TTS model but send a particular
seedvalue? otherwise the voice changes between generations. otherwise generate a single audio speech in one request with<short pause>for example
Separate requests gave a slightly different voice each time. Claude tested seed: the API accepts it, but two takes with the same seed still came out different. So it sent the whole script in one request, with <long pause> between lines, and cut the 206-second take back into lines. Gemini didn’t make the long pauses any longer than normal ones, so it chose the cuts that best matched each line’s length, then checked every piece with a transcription.
12 minutes.
5. Render
I hit render in HyperFrames Studio, which runs locally. Headless Chrome captured 9,000 frames, and FFmpeg encoded them with the audio in about 3 minutes.
No HeyGen account or cloud render was involved. The only costs were my Claude plan and the Gemini TTS calls.
6. Upload
Claude drafted the YouTube title, the chapters, and the description with credits for every CC BY-SA image and sound.
generate or extract a thumbnail for the video
Claude didn’t grab a frame from the film, because its text is too small to read at thumbnail size. It built a single still in HyperFrames with the same fonts and colours: Bain’s 1843 drawing, cut by the orange scan line, with the half below the line turned into fax dots.
Under a minute for the title and description, 1 minute for the thumbnail.
![]()