📂 The folder video-explicativo/
Everything Claude needs to create an explainer video lives in one well-organized folder. No more, no less.
The folder video-explicativo/ is the complete skill: it contains the input file (SKILL.md), the executable scripts (scripts/) and supporting references (references/). Claude accesses each layer only when needed — never everything at once.
video-explicativo/
├── SKILL.md ← entrada principal
├── scripts/
│ ├── composition-template.mjs ← gerador de composição
│ ├── fetch-fonts.mjs ← baixa .woff2 subset latin
│ └── narration-template.sh ← gera WAVs com Kokoro
└── references/
├── pipeline.md ← passo a passo completo
├── house-style.md ← identidade visual dark premium
└── gotchas.md ← armadilhas e correções
- ✓Keep all 7 files in the exact structure
- ✓Copy scripts to the video project before editing
- ✓Use
SKILL.mdas the entry point every time - ✓Consult
references/on demand via links
- ✗Edit the scripts directly in the skill folder
- ✗Ignore the reference files, thinking they’re optional
- ✗Create extra files in the project root (
index-vertical.html, backups) - ✗Rename
SKILL.mdor change your location
📚 The 3 references
Each file in references/ has a single purpose and is loaded only when that specific knowledge is needed.
pipeline.md
Step by step
The complete operational guide. It explains each of the 7 steps in the flow in detail: project structure, how to write the script, generate narration with Kokoro, measure durations with ffprobe, build the composition and render in two formats.
house-style.md
Visual identity
Defines the premium dark that Nei uses in all videos: palette (#0D1321 bg, amber as the accent, cyan as the highlight), Sora 700–800 for headings and Inter for body text, JetBrains Mono for code. Formats: 16:9 → 1920×1080 and 9:16 → 1080×1920. Required final CTA: INEMA.CLUB.
gotchas.md
Pitfalls
Real problems already encountered: overlapping_clips_same_track (toggle data-track-index 1/3 for scenes, 2/4 for captions), gsap_exit_missing_hard_kill (add tl.set after fade-out), decorative off-canvas elements marked with data-layout-ignore, and use ffmpeg -nostdin in git-bash.
O SKILL.md links to the 3 reference files using relative Markdown links. Claude never loads all the references at once — it opens only the file linked when that specific context is needed. This keeps the context window light.
Before starting any video, read the pipeline.md complete. It documents real cases that have already happened and prevents you from repeating errors that take hours to diagnose — especially the error involving ffmpeg -nostdin on Windows/git-bash.
🔧 The 3 scripts
Each script in scripts/ is a template you copy to the video project and adapt—never edit it directly in the skill.
Scripts are templates — not directly executable. You copy for your video project (renaming as needed) and then adapts it. The original in the skill remains untouched for the next video.
composition-template.mjs
Main generator for the HyperFrames composition. Defines AUDIO[] with real durations, CAPTIONS[], function sceneN() per HTML scene and anim(i,t) for GSAP tweens.
build-index.mjsfetch-fonts.mjs
Downloads the Sora, Inter, and JetBrains Mono fonts from Google Fonts as files .woff2 subset latin, generating assets/fonts/fonts.css with @font-face local.
node fetch-fonts.mjsnarration-template.sh
Shell script that writes the files assets/txt/sN.txt and calls HyperFrames TTS with the voice pf_dora --speed 0.98 to generate assets/audio/sN.wav.
assets/narration.sh# Gera cada cena via HyperFrames TTS
for i in 1 2 3 4 5 6 7 8; do
npx -y hyperframes tts "txt/s$i.txt" \
--voice pf_dora \
--speed 0.98 \
--output "audio/s$i.wav"
done
# Mede durações com ffprobe
for i in 1 2 3 4 5 6 7 8; do
d=$(ffprobe -v error \
-show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 \
"audio/s$i.wav" 2>/dev/null)
echo "s$i: ${d}s"
done
- ✓Copy to the project before editing
- ✓Run
node fetch-fonts.mjsbefore the first render - ✓Fill in
AUDIO[]with REAL durations from ffprobe
- ✗Use Google Fonts via CDN (lint fails:
google_fonts_import) - ✗Use estimated durations instead of the ones measured with ffprobe
- ✗Forget
ffmpeg -nostdinon Windows (file not generated)
🔢 The 7-step SKILL.md workflow
The SKILL.md defines a required sequence. Following it in order avoids rework — each step depends on the previous one.
Roteiro
— writes SCRIPT.md
6–9 scenes, from first principles to advanced. Short narration per scene (≈100s of speech ≈ 1:50 of video). Expand acronyms in speech: "SKILL.md" → "SKILL dot M D".
Projeto
— initializes HyperFrames
npx hyperframes init <nome> --example blank --non-interactive. Copy design.md (house style) for the root directory.
Fontes
— downloads the .woff2 subset latin
node fetch-fonts.mjs → generates assets/fonts/fonts.css. Required: lint fails if you use a font CDN.
Narração
— generates Kokoro WAVs
Voice pf_dora --speed 0.98. Measure durations with ffprobe. Template at scripts/narration-template.sh.
Composição
— adapts the template
Copy as build-index.mjs. Fill in AUDIO[] with REAL durations. Run: node build-index.mjs (16:9) e node build-index.mjs --vertical (9:16).
Validar
— lint + inspect
npx hyperframes lint (0 errors) and npx hyperframes inspect --samples 16 (0 issues). Fix following references/gotchas.md.
Render
— draft → high
Draft first to review, then --quality high. Generates renders/<nome>-16x9.mp4 e renders/<nome>-9x16.mp4.
Step 3 (fonts) MUST come before step 5 (composition), because the template imports assets/fonts/fonts.css that only exists after the fetch. Skipping this order causes a file not found error at runtime.
🧠 Progressive disclosure in practice
The design of progressive disclosure is what makes the skill efficient: Claude loads only what it needs, when it needs it.
Level 1 — Always in memory: only the name e description from the skill. Claude knows the skill exists and when to use it.
Level 2 — Loaded for the task: o SKILL.md complete, with all 7 steps and links to references.
Level 3 — Loaded on demand: each file in references/ only when that specific step is being executed.
This design works for any complex skill: a lean SKILL.md with explicit links to specialized references. When Claude runs step 6 (validate), it accesses gotchas.md. When it builds the composition, it accesses pipeline.md. Never both at the same time unless necessary.
- ✓Clear, specific description (the trigger for when to use it)
- ✓Streamlined workflow with links to detailed references
- ✓References organized by topic (pipeline / style / gotchas)
- ✗Put all the contents of references/ inside SKILL.md
- ✗Vague description like "creates videos" without specifics
- ✗Mixing visual identity rules with execution rules
🎯 Nei's user pattern
Every video production by Nei follows firm conventions — they're not optional preferences; they're the channel's signature identity.
#0D1321 background, amber as the primary accent, cyan for secondary highlights.
# Cena s9 — CTA INEMA.CLUB (incluída no template, não remover)
write s9 "Isso é conteúdo do INEMA ponto CLUB. Acesse: inema ponto club."
# Render — sempre os dois formatos
node build-index.mjs && npx hyperframes render \
--quality high \
--output renders/<nome>-16x9.mp4
node build-index.mjs --vertical && npx hyperframes render \
--quality high \
--output renders/<nome>-9x16.mp4
The voice pf_dora at speed --speed 0.98 is the default voice for all videos. Available PT-BR alternatives: pm_alex (female) and pm_santa (formal male). The first TTS run downloads ~340MB of model — no API key, no espeak-ng.
Scene 9 (CTA INEMA.CLUB) is already prebuilt in the composition-template.mjs. It must NEVER be removed. It's the channel signature and part of the brand identity. Adding more scenes? Insert them before scene 9, not after.
📋 Module 3.1 Summary
What you learned
- ✓The exact structure of the skill’s 7 files
video-explicativo/ - ✓The purpose of each of the 3 files in
references/ - ✓How each script works and how to use it
- ✓The 7 required workflow steps and their order
- ✓How progressive disclosure keeps context lightweight
- ✓Nei’s non-negotiable conventions (PT-BR, dark premium, 16:9+9:16, CTA)
Facts to remember
- →Default voice:
pf_dora --speed 0.98 - →LEAD = 0.5s · TAIL = 0.9s · FADE = 0.45s
- →Fonts: Sora 700–800 / Inter 400–600 / JetBrains Mono
- →Background:
#0D1321· Amber accent · Cyan highlight - →7 files total: 1 SKILL.md + 3 scripts + 3 references
#0D1321, Sora typography, GSAP animations, and how amber and cyan create the premium mood in INEMA.CLUB videos.