Build a Product Video Storyboard and ASS Captions from Five Frames

Run SCTCamp’s local demo to turn five placeholder frames into six storyboard segments and a 21.40-second ASS subtitle track.

SCTCamp’s Week 6 editing demo turns five placeholder frames into six storyboard segments and a 21.40-second ASS subtitle track. Open the storyboard and subtitle files to verify the source shot, clip duration, and caption timing for every segment. The demo uses local mock labels and a script template. It runs without an API key, a voice service, or FFmpeg. Pinned demo source · Public sample report, in Chinese

How do you reproduce the same storyboard?

Run these commands in a terminal with Git and uv. The pinned commit and its lockfile reproduce the example below. The first setup may need internet access to prepare Python and install dependencies.

git clone https://github.com/scotti1i/sct-camp.git
cd sct-camp
git switch --detach 065c875be1d32b040704a7a872e6d6fc62affcab
uv run --locked --package week06-auto-edit week06 demo

Open weeks/week06-auto-edit/output/ when the command finishes. View demo-report.html in a browser. The JSON and ASS files under demo/ open in a text editor. Open-source setup instructions

You can also inspect the files from this run directly. The captions use the demo’s fictional Chinese script. Storyboard JSON · ASS caption track

How do the output files relate to each other?

FileFields to check
demo/assets/*.png and demo/assets.jsonFive 540 × 960 placeholder frames. In assets, file names the frame, duration is its fictional clip duration, and note and roles hold the mock labels.
demo/script.jsonThe script array has six lines. Each carries a role, spoken text in voiceover, and on-screen text in caption.
demo/storyboard.jsonEach entry in segments maps a line to an asset. Its in and out values are offsets inside that source asset. The entry also carries role, voiceover, and caption.
demo/subs.assEach caption becomes a Dialogue entry on the assembled timeline. Words marked with asterisks get yellow styling. The ASS canvas is 1080 × 1920.

The first segment takes seconds 0.00 through 3.50 from demo-01.png. The next segment starts at 0.00 within a different asset. Its caption starts at 3.50 on the assembled timeline because the first segment is 3.50 seconds long. Add out − in for the preceding segments to get each caption’s start time. Placeholder inputs and subtitle implementation

What timings should you get?

Script roleAssetSource range (seconds)ASS caption timeline (seconds)
hookdemo-01.png0.00–3.500.00–3.50
paindemo-03.png0.00–3.753.50–7.25
featuredemo-02.png0.00–3.507.25–10.75
featuredemo-04.png0.00–3.2510.75–14.00
proofdemo-05.png0.00–3.4014.00–17.40
ctademo-01.png0.00–4.0017.40–21.40

The storyboard validator drops references to missing assets. It clamps starts to at least zero and ends to the asset’s duration. It discards segments shorter than 0.8 seconds after those checks and stops the pipeline if fewer than three valid segments remain. The last caption runs from 0:00:17.40 through 0:00:21.40. Storyboard validation code

What changes when you use your own product?

Work from copies of assets you have permission to use. Check that the shots and script match the actual product, and keep files with customer details, orders, or unreleased product information in your internal workspace. The demo produces a storyboard, captions, and an HTML report. Voice synthesis and MP4 rendering have their own steps and environment requirements. Week 6 editing demo · Product video shot list · Workflow for your own footage

To check frame size, frame rate, and caption boundaries on a rendered vertical video, run Scott’s Day 4 project. Vertical video render and quality checks