narrator-ai-cli
CLI tool to generate AI-narrated film commentary and drama dubbing videos.
Install
mkdir -p .claude/skills/narrator-ai-cli && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11889" && unzip -o skill.zip -d .claude/skills/narrator-ai-cli && rm skill.zipInstalls to .claude/skills/narrator-ai-cli
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Create AI-narrated film/drama commentary videos via CLI. Two workflow paths (Original & Adapted narration), 93 movies, 146 BGM tracks, 63 dubbing voices in 11 languages, 90+ narration templates. Use when creating narration videos, film commentary, short drama dubbing, or video production.Key capabilities
- →Create AI-narrated film commentary videos
- →Generate short drama dubbing
- →Produce videos using original or adapted narration workflows
- →Select from 93 pre-built movies and 146 background music tracks
- →Choose from 63 dubbing voices in 11 languages
- →Apply visual templates to videos
How it works
The skill interacts with the Narrator AI video narration API via a CLI tool, processing user selections for video components and task parameters.
Inputs & outputs
When to use narrator-ai-cli
- →Generate film commentary videos
- →Create short drama dubbing
- →Produce AI-narrated content
- →Query movie and voice templates
About this skill
narrator-ai-cli Skill
You have access to narrator-ai-cli, a CLI tool for the Narrator AI video narration API.
Always use --json flag for all commands to get structured output you can parse.
Prerequisites
The CLI must be configured before use. Check with:
narrator-ai-cli config show
If not configured, set up with:
narrator-ai-cli config set app_key <app_key>
Server defaults to https://openapi.jieshuo.cn — no need to configure.
Need an app_key or help with setup? Contact us to get started:
- 📧 Email: [email protected]
- 💬 WeChat:

Core Rules
- ALWAYS use
--jsonfor all commands. Parse the JSON output to extract values for next steps. - NEVER fabricate data — never guess file IDs, movie info, or voice IDs. Always query from CLI commands.
- ASK user to choose when there are multiple options (pre-built vs custom, which template, which movie, etc.).
- Poll task status — tasks are async. After creation, poll with
narrator-ai-cli task query <task_id> --jsonuntilstatusis2(success) or3(failed). - video-composing order_num source differs by path:
- Standard Path: use
generate-writing'stask_order_num(NOT clip-data's) - Fast Path: use
fast-clip-data'stask_order_num
- Standard Path: use
- dubbing list returns
idandtype— passidasdubbing, passtypeasdubbing_type. They are two separate fields. - negative_oss_key = video_oss_key — always set
negative_oss_keyto the same value asvideo_oss_keyin episodes_data. - search-movie may take 60+ seconds — this is normal (Gradio backend).
Decision Points (ASK USER)
Before starting any workflow, you need to help the user make the following choices. Present the options and let the user decide. Do NOT pick for them.
Decision 1: Which workflow path?
ASK: "请选择工作流路径:"
- 二创文案: 爆款学习 → 生成解说文案 → 生成剪辑数据 → 合成视频 → 视觉模板(可选)
- Based on existing reference video style, generates adapted narration
- Suitable when: user wants to recreate content based on reference material
- 原创文案 (faster & cheaper): 快速文案 → 快速剪辑数据 → 合成视频 → 视觉模板(可选)
- Generates original narration from movie info + narration template
- Three sub-modes: 热门影视(hot drama), 原声混剪(original mix), 冷门/新剧(new drama)
- Suitable when: user wants original narration, faster speed, lower cost
Decision 2: Narration style — pre-built template or custom learning?
ASK: "解说风格:使用预置模板还是自定义学习?"
-
Option A: Pre-built template (recommended, 90+ templates across 12 genres)
narrator-ai-cli task narration-styles --json # or filter: narrator-ai-cli task narration-styles --genre <genre> --jsonShow the list to user, let them pick one. The
idfield is thelearning_model_id. -
Option B: Custom learning (popular-learning task, Standard Path only) Requires user to provide a reference video + SRT. The output
learning_model_idis used in generate-writing.
Decision 3: Movie source files — pre-built material or user upload?
ASK: "电影素材:使用预置素材还是自己上传的文件?"
-
Option A: Pre-built materials (93 movies ready to use)
narrator-ai-cli material list --json # or search: narrator-ai-cli material list --search "<movie_name>" --json # or filter: narrator-ai-cli material list --genre <genre> --jsonShow results to user. Each entry has
video_idandsrt_id.- Use
video_idasvideo_oss_keyANDnegative_oss_key - Use
srt_idassrt_oss_key
- Use
-
Option B: User's uploaded files
narrator-ai-cli file list --json # or search: narrator-ai-cli file list --search "<keyword>" --json # or transfer by link: narrator-ai-cli file transfer --link "<url>" --jsonUser picks video and SRT files from their cloud storage.
Decision 4: BGM — pre-built track or user upload?
ASK: "背景音乐:使用预置BGM还是自己上传的音频?"
-
Option A: Pre-built BGM (146 tracks)
narrator-ai-cli bgm list --json # or search: narrator-ai-cli bgm list --search "<keyword>" --jsonShow results to user. The
idfield is thebgmparameter value. -
Option B: User's uploaded audio
narrator-ai-cli file list --jsonUser picks an audio file. Use its
file_idas thebgmparameter.
Decision 5: Dubbing voice — which voice and language?
ASK: "配音角色:请选择配音语言和角色"
# First show available languages
narrator-ai-cli dubbing languages --json
# Then list voices for chosen language
narrator-ai-cli dubbing list --lang <language> --json
# Or filter by genre recommendation
narrator-ai-cli dubbing list --tag <genre_tag> --json
Show results to user. From the selected voice:
idfield → pass asdubbingparametertypefield → pass asdubbing_typeparameter
There is no "custom upload" option for dubbing — always pick from the pre-built list.
(Users can create custom voices via voice-clone task separately.)
Decision 6: Visual template (optional)?
ASK: "是否需要应用视觉模板?(可选步骤)"
- Yes: Pick a template
Show results to user, let them pick. Thenarrator-ai-cli task templates --jsonnamefield goes intotemplate_namelist. - No: Skip magic-video step.
Workflow Path 1: 二创文案
popular-learning(optional) -> generate-writing -> clip-data -> video-composing -> magic-video(optional)
Step 1: Get learning_model_id
Based on Decision 2:
# Option A: Pre-built template (recommended)
narrator-ai-cli task narration-styles --json
# -> user picks one -> learning_model_id = selected item's "id"
# Option B: Custom learning
narrator-ai-cli task create popular-learning --json -d '{
"video_srt_path": "<srt_file_id from material or file list>",
"video_path": "<video_file_id from material or file list>"
}'
# Poll until done -> extract learning_model_id from results
Step 2: Generate Writing
# 2a. Search movie info (for confirmed_movie_json / story_info)
narrator-ai-cli task search-movie "<movie_name>" --json
# Show 3 results to user, let them pick one
# 2b. Get source files (based on Decision 3)
# Option A: narrator-ai-cli material list --search "<movie_name>" --json
# Option B: narrator-ai-cli file list --json
# -> user picks video and SRT files
# 2c. Create task
narrator-ai-cli task create generate-writing --json -d '{
"learning_model_id": "<from step 1>",
"learning_srt": "",
"native_video": "",
"native_srt": "",
"playlet_name": "<movie_name>",
"playlet_num": "1",
"target_platform": "抖音",
"vendor_requirements": "",
"task_count": 1,
"target_character_name": "<ASK user for main character name>",
"story_info": "",
"episodes_data": [{"video_oss_key": "<video_id>", "srt_oss_key": "<srt_id>", "negative_oss_key": "<video_id>", "num": 1}]
}'
# Poll -> extract task_order_num and results.file_ids[0]
Step 3: Generate Clip Data
# 3a. Get BGM (based on Decision 4)
# Option A: narrator-ai-cli bgm list --json -> user picks -> bgm = selected "id"
# Option B: narrator-ai-cli file list --json -> user picks audio -> bgm = selected "file_id"
# 3b. Get dubbing voice (Decision 5)
# narrator-ai-cli dubbing list --lang <lang> --json -> user picks
# -> dubbing = selected "id", dubbing_type = selected "type"
# 3c. Create task
narrator-ai-cli task create clip-data --json -d '{
"order_num": "<task_order_num from step 2>",
"bgm": "<from Decision 4>",
"dubbing": "<id from Decision 5>",
"dubbing_type": "<type from Decision 5>"
}'
# Poll -> extract results.file_ids[0]
Step 4: Video Composing
IMPORTANT: order_num is from step 2 (generate-writing), NOT step 3 (clip-data).
narrator-ai-cli task create video-composing --json -d '{
"order_num": "<task_order_num from step 2 (generate-writing)>",
"bgm": "<same bgm as step 3>",
"dubbing": "<same dubbing as step 3>",
"dubbing_type": "<same dubbing_type as step 3>"
}'
# Poll -> extract video URLs from results
Step 5 (Optional): Magic Video
Based on Decision 6:
# List visual templates
narrator-ai-cli task templates --json
# -> user picks template name
# Apply template
narrator-ai-cli task create magic-video --json -d '{
"task_id": "<task_id from step 4>",
"template_name": ["<selected template name>"]
}'
Workflow Path 2: 原创文案 (faster & cheaper)
search-movie -> fast-writing -> fast-clip-data -> video-composing -> magic-video(optional)
Step 0: Prepare
# Get narration style template (Decision 2)
narrator-ai-cli task narration-styles --json
# -> user picks one -> learning_model_id
# Search movie info (required for target_mode=1)
narrator-ai-cli task search-movie "<movie_name>" --json
# -> show 3 results, user picks one -> confirmed_movie_json
Step 1: Fast Writing (原创文案)
ASK user to choose a mode:
- Mode 1 - 热门影视 (Hot Drama): generates original narration from movie info. Requires
confirmed_movie_jsonfromsearch-movie. - Mode 2 - 原声混剪 (Original Mix): mixes original audio with narration. Requires
episodes_data[{srt_oss_key, num}]. - Mode 3 - 冷门/新剧 (New/Niche Drama): for lesser-known content. Requires
episodes_data[{srt_oss_key, num}].
# Mode 1 example (most common):
narrator-ai-cli task create fast-writing --json -d '{
"learning_model_id": "<from Decision 2>",
"target_mode": "1",
"playlet_name": "<movie_name>",
"model": "flash",
"language": "Chinese (中文)",
"perspective": "third_person",
"confirmed_movie_json": <user-selected search result>
}'
# Mode 2/3 example:
narrator-ai-cli task create fast-writing --json -d '{
"learning_model_id": "<from Decision 2>",
"target_mode": "2",
"playlet_name": "<movie_name>",
"episodes_data": [{"srt_oss_key": "<srt_file_id>", "num": 1}]
}'
# Poll -> extract task_id and results.file_ids[0]
Step 2: Fast Clip Data
# 2a. Get BGM (Decision 4)
# Option A: narrator-ai-cli bgm list --json -> user picks
# Option B: narrator-ai-cli file list --json -> user picks audio
# 2b. Get dubbing voice (Dec
---
*Content truncated.*
When not to use it
- →When custom dubbing voices are needed without prior creation
- →When fabricating data like file IDs or movie info
Prerequisites
Limitations
- →Dubbing voices must be selected from a pre-built list; custom upload is not an option.
- →The search-movie command may take 60+ seconds to return results.
- →Fabricating data like file IDs, movie info, or voice IDs is not supported.
How it compares
This workflow guides the user through specific choices for video elements and narration styles, unlike manually assembling video components.
Compared to similar skills
narrator-ai-cli side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| narrator-ai-cli (this skill) | 0 | 4mo | Review | Intermediate |
| video-editing | 0 | 4mo | Caution | Advanced |
| video-downloader | 101 | 7mo | Review | Beginner |
| youtube-transcript | 68 | 9mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
video-editing
DrinkBoooz
AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video
video-downloader
ComposioHQ
Downloads videos from YouTube and other platforms for offline viewing, editing, or archival. Handles various formats and quality options.
youtube-transcript
michalparkola
Download YouTube video transcripts when user provides a YouTube URL or asks to download/get/fetch a transcript from YouTube. Also use when user wants to transcribe or get captions/subtitles from a YouTube video.
openai-whisper
openclaw
Local speech-to-text with the Whisper CLI (no API key).
video-processor
basher83
Process video files with audio extraction, format conversion (mp4, webm), and Whisper
video-frames
openclaw
Extract frames or short clips from videos using ffmpeg.