Skip to content
Skill Authoring
Skill

/venice-explainer-video

Narrated explainer video workflow with Venice. Use when a user wants a short explainer, product walkthrough or social video built from several generated clips with voiceover and background music. Covers writing and timing the script with a text model, splitting it into scenes

From plugin
venice
17028 skills

Claude Code

$ npx -y skills add veniceai/skills --skill venice-explainer-video --agent claude-code

SKILL.md

venice-explainer-video.SKILL.md
name: venice-explainer-video
description: Narrated explainer video workflow with Venice. Use when a user wants a short explainer, product walkthrough or social video built from several generated clips with voiceover and background music. Covers writing and timing the script with a text model, splitting it into scenes that match model clip durations, keeping a consistent look across scenes, quoting the whole project before spending, generating clips, narration and a music bed, and assembling the final MP4 locally with ffmpeg. Uses venice_chat, venice_video_quote, venice_video_generate, venice_video_status, venice_tts, venice_audio_quote and venice_music_generate from the Venice MCP server, or the matching REST endpoints.

Explainer videos with Venice

Venice generates the pieces: script, scene clips, narration and music. You assemble them into one MP4 on the user's machine with `ffmpeg`. Built on [`venice-create-video`](../venice-create-video/SKILL.md) and [`venice-create-audio`](../venice-create-audio/SKILL.md).

| Piece | Venice MCP tool | REST endpoint | |---|---|---| | Script and scene plan | `venice_chat` | `POST /api/v1/chat/completions` | | Scene stills (optional) | `venice_image_generate` | `POST /api/v1/image/generate` | | Scene clips | `venice_video_quote`, `venice_video_generate`, `venice_video_status` | `/api/v1/video/quote`, `/video/queue`, `/video/retrieve` | | Narration | `venice_tts` | `POST /api/v1/audio/speech` | | Music bed | `venice_audio_quote`, `venice_music_generate`, `venice_music_status` | `/api/v1/audio/quote`, `/audio/queue`, `/audio/retrieve` |

Use when

  • A user wants a 30-90 second explainer, demo or social video, not a single clip.
  • The video needs a voiceover and background music.

Workflow

1. Write the script and scene plan

Use `venice_chat` to draft the narration from the user's topic and audience, then split it into scenes. For each scene, record the narration line, what is on screen, and a target length. Speech runs at roughly 150 words a minute, so a 6 second scene holds about 15 words.

2. Fit scenes to clip lengths

Video models only make clips of fixed lengths. Read the chosen model's `durations` with `venice_model_details` (`type: "video"`) and give every scene one of those lengths. Merge or split scenes rather than forcing a length the model can't make.

3. Lock the look

Consistency across scenes is what makes generated clips feel like one video:

  • Write one style line (palette, art style, camera feel) and append it to every scene prompt.
  • For the strongest consistency, generate a still per scene with `venice_image_generate` (same style line, same `seed`), then animate each still with an image-to-video model via `image_url`.
  • Use the same model and aspect ratio for every scene.

4. Quote the whole project, then confirm

Before generating anything, add up:

  • `venice_video_quote` for each scene clip. It prices only `model` and `duration`, so if resolution or audio changes the price for that model, quote through `POST /api/v1/video/quote` with those fields too, as [`venice-create-video`](../venice-create-video/SKILL.md) does.
  • `venice_audio_quote` for the music bed (instrumental, about the total length).
  • Narration, billed per character of the script.

Show the user the total and get a yes. This is the most expensive workflow in the catalog.

5. Generate the pieces

1. **Narration, one file per scene:** generate each scene's line with `venice_tts` and check its length (see below). If a line runs longer than its scene's clip, shorten the line or give the scene a longer duration now, before any video is paid for. 2. **One clip first:** queue the first scene with `venice_video_generate`, poll it with `venice_video_status`, and show it to the user. Confirm the look before queuing the rest, or a wrong style line gets paid for in every clip. 3. **The remaining clips:** queue them all, then poll each. They render in parallel. 4. **Music:** queue an instrumental with `venice_music_generate` (`force_instrumental: true` on models that support it), then poll with `venice_music_status`.

Save each piece to disk with the REST calls in [`venice-create-video`](../venice-create-video/SKILL.md#save-files) and [`venice-create-audio`](../venice-create-audio/SKILL.md#save-files).

6. Assemble with ffmpeg

Check that every narration line fits its clip. Each `narration-N.mp3` must be no longer than `scene-N.mp4`:

for f in narration-*.mp3 scene-*.mp4; do
  printf '%s %s\n' "$f" "$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$f")"
done

Join the clips in order (re-encoding keeps clips with slightly different settings compatible, and `-an` drops any model-generated audio):

printf "file '%s'\n" scene-1.mp4 scene-2.mp4 scene-3.mp4 > scenes.txt
ffmpeg -f concat -safe 0 -i scenes.txt -an -c:v libx264 -pix_fmt yuv420p video.mp4

Pad each scene's narration with silence to exactly its clip's length, then join the pieces, so every line starts with its scene:

for i in 1 2 3; do
  len=$(ffprobe -v error -select_streams v:0 -show_entries stream=duration -of csv=p=0 "scene-$i.mp4")
  ffmpeg -i "narration-$i.mp3" -af "apad,atrim=end=$len" -ar 44100 -ac 2 "narration-$i.wav"
done
printf "file '%s'\n" narration-1.wav narration-2.wav narration-3.wav > narration.txt
ffmpeg -f concat -safe 0 -i narration.txt narration.wav

Lay the narration over the video with the music underneath at a low volume, and cut the result to the video's exact length:

len=$(ffprobe -v error -show_entries format=duration -of csv=p=0 video.mp4)
ffmpeg -i video.mp4 -i narration.wav -i music.mp3 \
  -filter_complex "[2:a]volume=0.15[bed];[1:a][bed]amix=inputs=2:duration=first:normalize=0[audio]" \
  -map 0:v -map "[audio]" -c:v copy -c:a aac -t "$len" explainer.mp4

`normalize=0` keeps the narration at full volume; by default `amix` turns every input down. `duration=first` makes the mix as long as the na

Read more
@veniceai
Ships withvenice

Agent Skills for the Venice API. Skills are self-contained folders of instructions (one SKILL.md each) that an LLM agent loads on demand to work correctly against a specific surface area of the API.

Stars on GitHub

Momentum

stars in total
170
Star history of veniceai/skills on GitHub, a chart by star-history.com

Other skills on venice.

venice-api-keys

venice-api-keys

Manage Venice API keys. Covers GET/POST/PATCH/DELETE /api_keys, GET /api_keys/{id}, GET /api_keys/rate_limits, GET…

@veniceai@veniceaiInstall Skill
venice-api-overview

venice-api-overview

High-level map of the Venice AI API - base URL, which auth mode each endpoint accepts (API key, x402 wallet, or none), endpoint…

@veniceai@veniceaiInstall Skill
venice-audio-music

venice-audio-music

Async music, sound-effect and long-form voice generation via Venice. Covers the /audio/quote + /audio/queue + /audio/retrieve +…

@veniceai@veniceaiInstall Skill
venice-audio-speech

venice-audio-speech

Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices. Covers TTS models (Kokoro, Qwen 3,…

@veniceai@veniceaiInstall Skill
venice-audio-transcription

venice-audio-transcrip…

Transcribe audio files to text via POST /audio/transcriptions. Covers supported models (Parakeet, Whisper, Wizper, Scribe, xAI…

@veniceai@veniceaiInstall Skill
venice-audio-voice-changer

venice-audio-voice-cha…

Async speech-to-speech voice conversion via Venice — re-record a source recording in a different voice while keeping delivery and…

@veniceai@veniceaiInstall Skill

More skills from other plugins.

gstack-openclaw-ceo-review

gstack-openclaw-ceo-re…

Use when asked to review a plan, challenge a proposal, run a CEO review, poke holes in an approach, think bigger about scope, or…

gstack2w138k
@garrytan@garrytanInstall Skill
book-to-skill

book-to-skill

Converts books and documents (PDF, EPUB, DOCX, HTML, Markdown, plain text, RTF, MOBI/AZW with Calibre) into structured agent…

@virgiliojr94@virgiliojr94Install Skill
distilly

distilly

Set up the owner profile so a personal agent knows who it works for (first-run setup, \"get to know me\"), or distill colleague,…

@titanwings@titanwingsInstall Skill

Questions about venice-explainer-video.

Which coding agents can use venice-explainer-video?
venice-explainer-video installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.