About make-product-video
A skill for producing narrated product videos in walkthrough, sizzle reel, or element-film formats. It guides the work from message and script through recording, voiceover, timing, mixing, and delivery, using companion skills and Python scripts.
Key features
- 01Three video styles
- 02Script and cut planning
- 03Voiceover generation and transcription checks
- 04Audio timing and mix workflow
- 05Export sizing and validation
Use cases
- 01Plan a product walkthrough from real screen recordings
- 02Create a short music-led product reel
- 03Build an animated UI element film
- 04Prepare and master narrated video deliverables
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ gitethanwoo/ video-editing --skill make-product-videoAfter installing, type/make-product-videoin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
agents/openai.yamlreferences/mix-and-delivery.mdstyles.mdvoice-music-sfx.mdscripts/fit_size.pymix.pyvoiceover.pyDetails
From the project READMEMake a product video
This skill helps produce narrated product videos. It leans on two other skills:
record-agent-browser-demo(this repository) for recording real UI with theagent-browserCLI.video-editing(this repository) for contact sheets, the Remotion starter (video_workbench.py init-motion) and validating the final file (video_workbench.py validate).
Styles
There are three. They differ in where the picture comes from, how long they run, and what drives the timing.
| Style | What the viewer sees | Typical length | Picture source | Timing follows |
|---|---|---|---|---|
| Walkthrough | Whole real screens, flows played start to finish, a title card per act | 2 to 6 minutes | Screen recordings of the running app | Each recorded segment is sped up or held to fit its narration line |
| Sizzle reel | Real screens inside a designed frame, camera moves, a few title lines | 60 to 90 seconds | Screen recordings composited in Remotion | Scenes sit on the music's phrases; voice lines are placed in them |
| Element film | One thing at a time, centered on a plain background: a line of text or a single UI element lifted out of the product | 20 to 60 seconds | The element rebuilt as React/SVG in Remotion | Every animation is keyed to a word in the voiceover |
references/styles.md describes how each one is built.
Order of work
- One sentence. What the viewer should believe afterwards, and who the viewer is.
- Script. About 150 to 160 spoken words per minute. Share it with the user.
- Silent cut. Picture only: a rough Remotion render, or a contact sheet of recorded takes for a walkthrough. A sizzle reel also gets a draft music cue here, since its scenes cut on the music's phrases.
- Voice sample. 15 to 20 seconds of the script in the chosen voice, for the user to hear.
- Voiceover.
scripts/voiceover.pygenerates it and checks it against the script by transcription. - Re-time the picture to the voiceover.
- Music at the final length.
- Mix and master with
scripts/mix.py. - Deliver the master and any smaller copies the destination needs.
Agents can't hear the result. The user's ears are the check on voice, music and effects, so send them the voice sample and the first full mix.
Voice
Voiceover uses eleven_v4. v4 has no speed setting and no SSML; pace, pauses and delivery are written into the text as tags. references/voice-music-sfx.md covers tags, music and sound effects.
Timing
Timings come from the generated audio. voiceover.py writes each clip's length to manifest.json and its word times to <id>.words.json. Keep scene times, clip start times and the total length in one timeline file, and generate both the picture's timing and the mix file from it.
Scripts
Plain Python 3, in this skill's scripts/ folder. They need ffmpeg; voiceover.py also needs the elevenlabs CLI, logged in. Each docstring describes its input file.
python3 scripts/voiceover.py vo.json vo/ # generate, transcribe, check, write word timings
python3 scripts/mix.py mix mix.json # stems and premix
python3 scripts/mix.py master mix.json picture.mp4 output/film.mp4 # loudness, limiter, mux
python3 scripts/fit_size.py output/film.mp4 output/film-10mb.mp4 --mb 10 # a copy under a size limit
references/mix-and-delivery.md has starting levels, validation and file sizes.