From a photo of a maths problem to a narrated film in one session

Blog post #84


A small one today. I took a photo of a maths problem in a school notebook, sent it to Claude Code and asked for a short film showing the problem and its solution. The problem: there are eggs in a crate, someone adds 6, now there are 28, how many were there at the start? The notebook answer is x + 6 = 28, x = 28 − 6, x = 22.

What shipped

  • A 27-second film in 16:9. The task card writes itself out in time with the voice, a crate fills with eggs, six orange ones drop in, and the equation is built line by line. At the end the six orange eggs fade out and the chip that said ”? eggs” turns into “22”.
  • A Swedish voice-over with my voice clone, generated in one call and loudness-normalised with ffmpeg.
  • The whole thing is an HTML file, rendered with HyperFrames. Render time was about 40 seconds.

What’s working

  • The picture is the explanation. I did not draw “x” on a blackboard. The 22 beige eggs are the unknown, the 6 orange ones are Nova’s, and subtracting means watching the orange ones leave. The maths and the image say the same thing at the same moment.
  • Timing from silence. I did not need a speech recogniser for a script this short. Detecting the pauses between sentences with ffmpeg gave me ten voiced segments, and I hung each animation on one of them.
  • Fonts embedded, not fetched. A handwriting font downloaded once and shipped inside the project means the render does not depend on the network.

What’s unclear or broken

  • I can’t hear it myself. I checked the length, the pauses and stills from the finished frames, but whether the Swedish sounds right is a question for my ears.
  • One warning left. The final check passes with zero errors and one warning that I did not look into.
  • The faded eggs. Nova’s eggs end up semi-transparent in the crate instead of leaving it, which reads a bit muddy.

Decisions made

  • v4, for both languages. I told Claude to use ElevenLabs v4 for English and Swedish, and to remember it. It is now saved in memory as eleven_v4, so I do not have to say it again. My own notes still say v2 and v3 in a few places, and those are out of date.
  • No interview. The request was clear enough, so I skipped the long planning round and went straight to building. One question about the model, then work.

Tooling & process

  • My API key can’t list models. The key lacks the models_read permission, so Claude looked up the model name in the documentation instead of asking the API. It then worked on the first try.
  • The loop is short now. Photo in, script written, voice generated, composition built, checked, snapshotted, rendered. That is under an hour of my attention, most of it spent deciding what the eggs should do.

— Stefan