video-tutorial-maker
Skill32 starsChanged 4 months agoMITView on GitHub
Create scripted tutorial videos with narration, TTS, aligned subtitles, MP4 rendering, and platform variants. Use when Codex needs to create or revise tutorial, explainer, product walkthrough, course, demo, or short-form videos; generate 16:9 landscape output by default unless the user explicitly asks for 9:16, 1:1, or another format.
In this repository9 other files it gives its agents.
- excalidraw-visual-designerSkill
- gif-makerSkill
- grid-sticker-generatorSkill
- sticker-factorySkill
- toutiao-publisherSkill
- wechat-post-publisherSkill
- wechat-sticker-assets-designerSkill
- wechat-sticker-makerSkill
- template-skillSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. About 0 are common, 12 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈12
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Use this skill to turn a topic, outline, script, or existing video into a finished tutorial video package.
- Distinctive: line 10
Default assumption: produce a 16:9 landscape MP4 first.
- Very specific: line 16
If the user does not specify aspect ratio, use 1920x1080 landscape video.
- Distinctive: line 19
Write the video package.
- Distinctive: line 20
Create a concise script with one narration block per scene or slide.
- Distinctive: line 22
Keep on-screen text shorter than narration.
- Very specific: line 25
Prefer edge-tts when available because it is free and more natural than basic system voices.
- Distinctive: line 30
Use the subtitle output from TTS when available.
- Very specific: line 33
Verify the final subtitle file contains real timestamps and no NaN.
- Distinctive: line 37
If a scene has a trailing pause, pad that scene's audio with silence to the exact scene video duration before concatenating.
- Very specific: line 42
Default final output: 1920x1080, SAR 1:1, DAR 16:9.
- Distinctive: line 44
Avoid cropping important tutorial content unless the user explicitly wants a crop-first social cut.
- Very specific: line 47
Use ffprobe to confirm width, height, aspect ratio, streams, duration, and file size.
- Distinctive: line 50
Check subtitles for timestamp validity and obvious drift.
- Distinctive: line 54
Use a project virtualenv if one exists:
- Distinctive: line 63
If network or TTS fails, report the exact blocker and either retry after permission is granted or fall back to a clearly labeled system TTS …
- Distinctive: line 86
When the source is 16:9 and content must not be cropped:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Video Tutorial Maker
Use this skill to turn a topic, outline, script, or existing video into a finished tutorial video package.
Default assumption: produce a 16:9 landscape MP4 first. Create 9:16 or other platform variants only when requested or clearly useful.
Workflow
- Define the deliverable.
- Confirm the topic, target audience, tone, duration, language, and required output path when they are unclear.
- If the user does not specify aspect ratio, use
1920x1080landscape video. - For coding or software tutorials, prefer a clear slide/screen sequence over dense narration.
- Write the video package.
- Create a concise script with one narration block per scene or slide.
- For each scene, define title, subtitle, bullets or screen action, visual style, and narration.
- Keep on-screen text shorter than narration. Do not force full captions into the visual design.
- Generate speech.
- Prefer
edge-ttswhen available because it is free and more natural than basic system voices. - For Chinese, start with
zh-CN-XiaoxiaoNeural; adjust voice or rate only if the user asks or the result is clearly poor. - Generate audio per scene, not one large narration file. Per-scene audio makes transition sync and subtitle offsetting deterministic.
- Prefer
- Build subtitles from the same timeline as audio.
- Use the subtitle output from TTS when available.
- Parse both
00:00:01.234and00:00:01,234timestamp formats. - Offset each scene subtitle by the cumulative scene duration.
- Verify the final subtitle file contains real timestamps and no
NaN.
- Render video.
- Render each scene to a fixed duration equal to its audio duration plus any intended pause.
- If a scene has a trailing pause, pad that scene's audio with silence to the exact scene video duration before concatenating.
- Concatenate padded scene audio, not raw scene audio. Otherwise voice will drift earlier after each transition.
- Mux video, audio, and soft subtitles into MP4 when supported; otherwise output the subtitle file as a sidecar.
- Produce platform variants.
- Default final output:
1920x1080, SAR1:1, DAR16:9. - For converting a 16:9 master to 9:16 without losing content, use a blurred or darkened background plus the full-width original video centered.
- Avoid cropping important tutorial content unless the user explicitly wants a crop-first social cut.
- Default final output:
- Verify before delivery.
- Use
ffprobeto confirm width, height, aspect ratio, streams, duration, and file size. - Compare final video and audio durations. Differences should be near zero; a few milliseconds is fine.
- Extract at least one preview frame for visual inspection; for long videos, inspect an early and mid/late frame.
- Check subtitles for timestamp validity and obvious drift.
- Use
Edge TTS Pattern
Use a project virtualenv if one exists:
.venv/bin/edge-tts --voice zh-CN-XiaoxiaoNeural --rate +0% \
--file scene-01.txt \
--write-media scene-01.mp3 \
--write-subtitles scene-01.vttIf network or TTS fails, report the exact blocker and either retry after permission is granted or fall back to a clearly labeled system TTS draft.
Sync Rules
The most common drift bug is this:
scene video duration = raw audio duration + pause
concatenated audio = raw audio duration onlyThis creates cumulative drift. Fix it by padding every scene audio to the corresponding scene video duration:
ffmpeg -y -i scene-01.mp3 \
-af "apad,atrim=0:SCENE_DURATION" \
-ar 24000 -ac 1 -c:a pcm_s16le scene-01-padded.wavConcatenate scene-XX-padded.wav files, then mux that audio with the video.
9:16 Conversion Pattern
When the source is 16:9 and content must not be cropped:
ffmpeg -y -i input.mp4 \
-filter_complex "[0:v]split=2[bgsrc][fgsrc];\
[bgsrc]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,\
gblur=sigma=32,eq=brightness=-0.12:saturation=0.75[bg];\
[fgsrc]scale=1080:-2[fg];\
[bg][fg]overlay=(W-w)/2:(H-h)/2,format=yuv420p,setsar=1[v]" \
-map "[v]" -map 0:a:0 -map '0:s?' \
-c:v libx264 -preset veryfast -crf 20 \
-c:a copy -c:s mov_text -movflags +faststart output-9x16.mp4After conversion, verify:
ffprobe -v error \
-show_entries stream=index,codec_type,codec_name,width,height,sample_aspect_ratio,display_aspect_ratio,duration \
-show_entries format=duration,size \
-of default=noprint_wrappers=1 output-9x16.mp4Expected video values for this 9:16 variant:
width=1080
height=1920
sample_aspect_ratio=1:1
display_aspect_ratio=9:16Delivery
In the final answer, provide the absolute path to the finished MP4 and mention the verification actually run. If there are multiple outputs, identify the recommended one first, usually the 16:9 file.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

