1. Introduction

This post shows how I made an 18-second intro video for Scuti AI with Claude Code. The idea comes from “how to run an ai video agency (FULL GUIDE)” by Chris (@everestchris6) on X: motion graphics can be “written as code”. The AI writes the text, motion and transitions in HTML + GSAP, then every frame is rendered into an MP4. No After Effects needed.

The process has 3 steps: storyboard → build → critic. In the critic step, a fresh agent that never saw the build reviews the video. I turned each step into one prompt:

Plan an 18-second intro video for Scuti AI (facts only from scuti.asia). – Write a storyboard shot by shot: what’s on screen, what moves, how long it holds, how it gets to the next shot. – One object carries the story across all shots: the 5-node red network from the Scuti AI logo. – No empty frames. Don’t invent testimonials, ratings, prices or results.

Build the storyboard as a single HTML page (1920×1080, GSAP 3). – ONE paused master timeline + window.seekTo(t), so it can be previewed in the browser and rendered frame by frame. – Motion rules: the thing in front becomes the transition; one main movement with smaller overlapping ones; hold to read -> leave fast (power3.in) -> arrive slow (expo.out). – Add a preview bar (play / pause / scrub).

You’re reviewing a video you did not build. Be honest. – Here are timestamped contact sheets, the brief and the motion rules. – List every problem, biggest first, each with a time in the video: empty frames, shots that hold too long, text that collides, text visible too early.

2. Result: the Scuti AI intro video

18 s · 1920×1080 · 30 fps · background music

Shot Time Content
1 0 – 3.9s The red 5-node network draws in + “We make services people love”
2 3.9 – 6s Network flies into the camera → “by the power of Gen AI.”
3 6 – 9.75s 5 services fly out from the network centre
4 9.75 – 12.5s Numbers: 2015 · 400+ · 300+ · 6
5 12.5 – 18s The red dragon swoops in, logo + tagline + scuti.asia

3. The method in 4 steps

Tool What it does
Claude Code (Claude Opus 5.5) Writes the storyboard and the animation code, and calls a fresh agent as the critic
HTML/CSS + GSAP 3 “Video as code”: one GSAP timeline you can jump to any second
Motion Studio (a local web page) Where you work: storyboard, preview, contact sheet, render button
Chrome + ffmpeg Jump to every frame, capture it in Full HD, assemble the MP4 with background music

4. Step-by-step demo

Run python studio/studio_server.py and open http://localhost:8766/studio/ in Chrome.

4.1. Open Motion Studio

The 5-shot storyboard is on the left; the two remaining jobs, critic review and MP4 render, are on the right.

Motion Studio with the 5-shot storyboard

4.2. Preview

Click “▶ Mở bản xem trước”: the animation plays in Chrome and you can scrub the timeline. Edit code → F5 → look again.

Shot 1 in the preview

4.3. Contact sheet and critic

Click “🖼️ Tạo contact sheet” to tile 8 timestamped frames for a fresh agent that never saw the build (Prompt 3). Click “📝 Xem nhận xét critic” to see the issues from 3 rounds.

Contact sheet and critic notes

4.4. Render the MP4

Click “🎬 Render MP4”: 540 frames are captured at 1920×1080 and ffmpeg joins them with music. Then click “▶ Mở video” to watch.

Render done: 18 s, 1920×1080, 30 fps

5. What did the critic fix? (v1 → v4)

Version Critic found (biggest issues) Fixed
v1 19s 1.5 s of empty frame, text frozen too long, card text visible while cards were still flying, the year “counting” 1991 → 2015 Rebuilt the timeline, text appears when cards land, fixed year
v2 18s Score 6/10: stats leave unevenly, words collide while scaling, network nearly gone in shot 2 Stats leave together, words rise from below, network always visible
v3 18s Round 3, a fresh critic that had to rate each issue: 2 major issues. At 6.5s the cards appear as empty boxes; at 12.5–14s there are about 2 seconds with no text and half the frame is empty Cards carry their text as they fly out; the logo text appears at 12.85s instead of 14s
v4 18s 6 minor issues left and about 0.5s of transition with no text, so the loop stops Final

v1 (before the critic)

v4 (final)

6. Claude Code in the terminal: critic round 3

I ran round 3 straight in the terminal with 2 prompts, about 10 minutes in total.

6.1. Critic review

Prompt 1: grab stills, build a contact sheet, spawn a fresh critic subagent, and rate every issue major or minor. It found 2 major issues the earlier rounds missed: empty cards at 6.5s and about 2 seconds with no text at 12.5–14s.

The critic issue list (Claude replied in Vietnamese)

6.2. Fix, render, check

Prompt 2: “Fix the major problems only”. Claude edits the GSAP timeline, re-renders, checks the file with ffmpeg, and lists what it did not fix (6 minor issues).

Result: 18s, 1920×1080, 30 fps, with audio

7. Full process video

The process video has 2 parts. The first part (about 2 minutes) is the Claude Code terminal session from section 6, with the waiting parts sped up. The second part shows Motion Studio, from opening it to the finished render and playing the final video.

Process video, 4:03: Claude Code terminal (0:00–1:55), Motion Studio (1:55–4:03), no sound

8. My opinion & how I apply it

  • “Video as code” suits engineers: it can be diffed and reviewed, and a re-render takes about 2 minutes.
  • Pacing beats effects: one carrier object and the “hold → leave fast → arrive slow” rhythm.
  • The independent critic is the most valuable part: 10 issues in round 1, and still 2 major ones in round 3. The same idea works for code review, docs and slides.
  • Limits: the SVG dragon still looks a bit toy-like; the critic only sees stills, so a human must check smoothness and sound.
  • Where I’d use it: release-note videos from one template, proposal openers with the client’s own data, onboarding and sprint recap videos.

9. References