Install
openclaw skills install @fuq87573-create/produce-voiceover-teaching-videoSeven-worker faceless teaching video production
openclaw skills install @fuq87573-create/produce-voiceover-teaching-videoAct as the director of a seven-worker production line. Treat the supplied narration as sensitive source material and the prepared narration duration as the timeline authority. Do not clone a voice, upload source media, or publish the finished video unless the user explicitly requests that separate action.
Require ffmpeg, ffprobe, Python 3.10+, and a video renderer capable of deterministic 9:16 output. Prefer HyperFrames when installed; otherwise use the existing renderer in the repository or an FFmpeg composition. Use local Whisper only when no transcript or reliable timing exists.
Read these references before execution:
references/workflow.md for the seven roles and wave schedule.references/contracts.md for stage artifacts and handoff fields.references/performance.md for fast, balanced, and quality modes.references/publishing.md before creating the cover or social copy.ffmpeg, ffprobe, Python, the selected renderer, and bundled scripts required by this workflow.Create a new job directory outside the skill folder. Never write user media into the skill directory.
python scripts/jobctl.py init \
--job-dir <job-dir> \
--article <article-or-notes> \
--audio <voiceover.mp3-or-wav> \
--images <image-1> <image-2> \
--videos <video-1> <video-2> \
--mode fast \
--speech-rate 1.15 \
--source-video-speed 1.0
Use --speech-rate 1.2 only when the user explicitly requests 1.2x. If the user gives a target duration instead, run scripts/prepare_voiceover.py --target-minutes <min>-<max> and reject an automatically calculated rate outside 0.85-1.35; ask the user whether the script or duration should change.
Use subagents when the host supports them. Give each worker only the artifact paths listed in references/workflow.md, never the full conversation. Run independent roles in parallel; otherwise run the same roles sequentially without changing their contracts.
Every worker must write a compact JSON report with status: pass|needs-human|fail. A failure returns only to the worker that owns the defective artifact. Do not rerun completed upstream roles unless their input hash changed.
atempo; never speed the final mixed video as a shortcut.atempo. Align captions after pause cleanup and retiming.1.0x; recommend 1.1-1.2x for concise explainers and require explicit approval above 1.25x.1.15x, retime narration, captions, and narration-led visuals together while keeping embedded source videos at 1.0x unless the user separately changes their speed.cover.png and publish-copy.json, then run scripts/validate_delivery.py.Never perform a second full render for a copy-only or outro-only change when a local scene/chunk replacement is possible.
Keep one canonical 08-delivery/final.mp4. For revisions, build and fully decode a temporary master, then atomically replace the canonical file. Do not create v2, final-final, or other duplicate deliveries unless the user asks for versions.
Deliver only when all of the following exist and validation passes:
08-delivery/final.mp408-delivery/cover.png08-delivery/publish-copy.json07-qc/qc-report.jsonThe final response must report the absolute output paths, duration, speech rate, resolution, frame rate, loudness result, mode, and any rights items that still need human confirmation. When source videos are present, also report their count, playback speed, original-audio policy, and confirmation that narration pauses and resumes.
scripts/jobctl.py: initialize jobs, hash inputs, track stages, and validate handoffs.scripts/prepare_voiceover.py: apply pitch-preserving speed changes and write audio metadata.scripts/render_cover.py: render an exact-text 9:16 technology-style cover without model-generated text.scripts/validate_delivery.py: probe the final MP4, cover, publish copy, and QC report.