Create Onto2AI product demos and generate AI narration audio files in the demo folder.
Use this skill when the user asks to create or update demo walkthrough content, voiceover scripts, or narrated audio files.
demo/.demo/demo-audio-scripts.md — canonical script source.demo/demo_tts_jobs.jsonl — batch TTS job file.demo/audio/*.mp3 — generated narration files.demo/video/<demo_name>/<demo_name>_demo.json — single source of truth manifest.demo/video/review/*.mp4 — rendered review videos.demo/demo-audio-scripts.md
Purpose: master script catalog across demos.
When to use: define or revise content before generating audio.demo/demo_tts_jobs.jsonl
Purpose: batch job list for TTS (input, out).
When to use: generate many audio clips in one pass.demo/audio/<demo>.mp3
Purpose: narration output for one demo.
When to use: attach to screen recording or review voice quality.demo/video/<demo>/<demo>_demo.json
Purpose: canonical per-demo manifest (narrative text + timing + scenes + TTS config).
When to use: every edit; avoid parallel duplicate files.demo/video/review/*.mp4
Purpose: synced preview/final review outputs.
When to use: approval rounds and iteration.demo/demo-audio-scripts.md.demo/demo_tts_jobs.jsonl from script content (one JSON object per line with input and out).demo/audio/.demo/ (do not scatter files in docs/ or output/).Use when iterating one demo only.
# derive narration from JSON manifest
jq -r '.narrative_lines | sort_by(.start_ms) | .[].text' \
demo/video/demo01/demo01_demo.json > /tmp/demo01_narration.txt
python /Users/weizhang/.codex/skills/speech/scripts/text_to_speech.py speak \
--input-file /tmp/demo01_narration.txt \
--voice cedar \
--response-format mp3 \
--instructions "Voice Affect: Warm and composed. Tone: Professional and clear. Pacing: Steady." \
--out demo/audio/demo01.mp3 \
--force
Use the speech skill CLI:
python /Users/weizhang/.codex/skills/speech/scripts/text_to_speech.py speak-batch \
--input demo/demo_tts_jobs.jsonl \
--out-dir demo/audio \
--voice cedar \
--response-format mp3 \
--instructions "Voice Affect: Warm and composed. Tone: Professional and friendly. Pacing: Steady and clear." \
--rpm 50 \
--force
demo01_*.mp3, demo02_*.mp3, etc.*_demo.json as the single source of truth for both text and timing.To attach narration to a screen recording:
ffmpeg -y \
-i demo/video/demo01.mov \
-i demo/audio/demo01.mp3 \
-filter_complex "[1:a]apad[aout]" \
-map 0:v -map "[aout]" \
-c:v copy -c:a aac -b:a 192k -shortest \
demo/video/review/demo01_synced_with_voice.mp4
Optional timing offset (example +3 seconds):
ffmpeg -y \
-i demo/video/demo01.mov \
-i demo/audio/demo01.mp3 \
-filter_complex "[1:a]adelay=3000|3000,apad[aout]" \
-map 0:v -map "[aout]" \
-c:v copy -c:a aac -b:a 192k -shortest \
demo/video/review/demo01_synced_with_voice_offset3s.mp4
OPENAI_API_KEY must be set for live audio generation.