旁白讲解视频脚本渲染

SKILL内容创作

原名 VisoTalk · 标识 visotalk

内容创作 未标注权限 许可证不明确
安装这个技能

用 TSX 描述画面并编写旁白,校验后渲染成带旁白的讲解视频,动画与旁白自动同步,适合知识讲解、动态图解和代码演示类内容。

一句话选型结论

按资料字段整理

旁白讲解视频脚本渲染是内容创作类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类内容创作 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_85361895/visotalk
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

内容创作
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_85361895仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量22.2 KBSKILL.md 原文大小,越大说明说明书写得越细

能做什么

0 项能力
上游给出的能力概览与适用场景
知识讲解视频制作动态图解演示代码走查视频

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写文章与脚本

按主题产出初稿与分镜脚本。

改稿与润色

把草稿改顺、统一语气。

多平台文案改写

同一内容按平台改成长短不同的版本。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在内容创作场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
旁白讲解视频脚本渲染当前 未标注权限 未标注 未标注 未标注 有
AI 视频生成 调用外部服务 GitHub 仓库 431.3 万 Codex、Claude、Cursor 有
视频帧 联网访问 ClawHub 市场 262.1 万 OpenClaw 有
Markdown 转换器 写入文件 ClawHub 市场 135.3 万 OpenClaw 有
哔哩哔哩全合一 接触敏感数据 ClawHub 市场 64.1 万 OpenClaw 有
Remotion video toolkit 命令行 浏览器控制 ClawHub 市场 63.9 万 OpenClaw 有

SKILL.md 全文

22.2 KB
模型实际读到的说明书原文,来自技能仓库

Making an explainer with VisoTalk

You write one file, doc.tsx: a VisoTalk document, spec 0.5, a TSX module. A scene holds the narration lines, the parts (boxes of ordinary React that draw
what is on screen) and an animation that says when each thing appears or changes, anchored to the words of the narration. The skeleton (lines, parts, animations) is
read by the engine as literals; what is inside a part is React you write freely: CSS layout, SVG, data tables, loops. The engine owns time and rendering: you never
write frame numbers; the picture is a function of the clock and of numbers the document tweens. Then you validate it, look at stills, and render it.

This is a creative task, not a form to fill in. You are a video designer: design an explainer video of top professional standard. The viewer should understand the narration from what is on screen, and want to keep watching. The video is finished when someone who has not read the script would be glad to publish it, not when qa is clean: qa only proves nothing is broken. Everything inside a part is a material you may bend: size, colour, weight and layout are yours, and a picture you draw yourself (SVG, a chart from data, a component) is the normal way to get a scene that explains; the document keeps the words and the timing. Do not settle for the first arrangement that validates. And never deliver what a slide deck would give: a title, cards or chips arranged on a grid and made to fade or slide in is page layout plus entrance animation, and anyone can make it. Make work with a design of its own, the kind a top design studio would put its name to: a visual idea specific to this subject (a metaphor, a drawing driven by the data, one object that transforms instead of a new one appearing, a move of the frame), real typographic hierarchy, deliberate composition and negative space, and motion that carries meaning.

Setup

  • visotalk <command> doc.tsx is the CLI, an npm package: run it as npx visotalk@latest <command> doc.tsx (keep @latest: a copy installed earlier would run instead, and one older than 0.2 has no doctor), or install it once with npm i -g visotalk@latest
    (in the repository: pnpm visotalk). Node 22 or later and ffmpeg are needed. Work files go to .visotalk/<meta.id>/.
  • Run npx visotalk@latest doctor --fix once on a machine before anything else. It reports what rendering needs and installs what is missing into
    ~/.visotalk (the pinned Chrome, the Kokoro narration model, a Python environment with its packages, the word-timing weights, the fonts; about 1.1 GB, a few
    minutes) so that every command finds them. It cannot install ffmpeg or Python 3.9+; it says so and you install those. It exits 0 when all is
    ready. Run npx visotalk@latest doctor to check without installing. VISOTALK_CHROME, KOKORO_DIR, VISOTALK_PYTHON, TORCH_HOME and VISOTALK_FONTS override what it
    installed; VISOTALK_HOME moves ~/.visotalk (keep it short: narration fails under a path over about 90 characters).
  • Another voice. The narration is Kokoro unless the document names a provider: <Doc voice="minimax:English_Trustworthy_Man" speed={1}> speaks it with MiniMax
    (MINIMAX_API_KEY in the environment; MINIMAX_GROUP_ID and MINIMAX_TTS_MODEL are optional; the endpoint is the international https://api.minimax.io, so a China account sets MINIMAX_BASE_URL=https://api.minimaxi.com), whose word times replace the aligner's for languages
    written with spaces. Also built in: elevenlabs:<voice id> (ELEVENLABS_API_KEY), volcengine:<voice_type> (VOLCENGINE_APPID and VOLCENGINE_ACCESS_TOKEN; the
    strongest Mandarin) and openai:<voice> (OPENAI_API_KEY; no word times, so the English-only aligner places the words). Any other service is a module whose default export is (request) => {audio, ext, words?}: voice="./my-voice.mjs:name"
    (see the header of packages/cli/src/voice_lines.ts). A clip is billed once; it is cached by provider, voice, speed, language and text.
  • Choosing a MiniMax voice. Take one of the document's own language (lang en → English_*, zh → Chinese (Mandarin)_*, ja → Japanese_*, ko → Korean_*), never one of another language, and a broadcaster, announcer or host: steady and knowledgeable. Never a character persona (a princess, knight, queen, butler, boss, girl, boy or lady of some kind). The defaults, from MiniMax's system voice list:
    English_Trustworthy_Man (alternative English_Gentle-voiced_man), Chinese (Mandarin)_News_Anchor (alternative Chinese (Mandarin)_Male_Announcer), Japanese_IntellectualSenior, Korean_IntellectualSenior. A voice that is not in that list is only a guess: English_captivating_female1, once named here, does not exist.
  • Chinese, Japanese and Korean. Kokoro speaks English only, so a document in lang zh…, ja… or ko… must name a provider's voice, e.g. <Doc lang="zh-CN" voice="minimax:Chinese (Mandarin)_News_Anchor">;
    without one prepare stops and says so (and init takes "voice" in lines.json). The lines are timed from their characters (about 4.4 a second in Chinese, measured; Japanese ran at about 5.0 on one script, so write fewer characters than the estimate suggests) until the provider has spoken them, and word
    anchors in Chinese and Japanese are placed by character position (Korean is spaced: MiniMax's word times place its anchors, and a phrase may span words), up to half a second off: write each phrase long enough to occur once. Write numbers as characters in the line, not digits (four hundred and fifty, spelled in Chinese characters).
  • Fonts. doctor --fix installs Noto Sans SC, Noto Sans JP, Noto Sans KR, Noto Serif SC, LXGW WenKai (a kai, brush-script face) and Newsreader (a display serif with its italic, for a Latin-script film with the weight a system sans lacks). A CJK document gets the Noto Sans of its language by itself; to choose
    another, name its family in the theme: <Doc theme="visotalk/dark" tokens={{fonts: {sans: '"Noto Serif SC", serif', mono: '"JetBrains Mono", monospace'}}}>. build embeds each face cut down to the
    characters the document holds, so a frame does not depend on the machine's fonts; var(--vt-sans) in a part and the captions use it. A face the machine lacks stops build and names doctor --fix.
  • Reference, only when this file is not enough: the techniques in references/ (markup.md, parts.md, assets.md), and the vocabulary
    itself: visotalk schema prints the tags, motions and hooks (schema tags, schema motions, schema hooks).
    Finished documents are in examples/ of github.com/visotalk/visotalk. They show what the engine can do, not what to draw: do not reuse their look; your video has its own picture.

Commands

Command Does Cost
validate doc.tsx syntax, references, anchors, and the code of your parts as text (no timers, Math.random, Date, network, CSS animations); prints one issue per line at doc.tsx:line:col free
init doc.tsx [--lines lines.json] [--id id] a valid skeleton from your script ({"title", "lang", "voice", "canvas" (9x16for a vertical film), "lines": [{"id", "text", "say", "intent"}]}): every line in one scene draft, no parts, nothing drawn; it starts the narration in the background seconds
prepare doc.tsx narration audio per line (Kokoro for English, a provider's voice for Chinese, Japanese and Korean) + word times (English only, or a provider's); writes voice.json. init and the first still, sheet or qa start it in the background; until it is ready they time each line from its words (about 2.8 a second; 3.8 characters in Chinese) and say so, so a picture never waits for it minutes the first time
sheet doc.tsx [--at 0.85] one frame per line as a contact sheet; prints the PNG path. Works from the skeleton, before anything is drawn seconds
still doc.tsx --line scene/line [--at 0.85] or --time 40 [--out name.png] one frame at full size (1920x1080); --at is how far through the line (0 to 1), --time any second of the video (the end of the video gives its last frame, the picture a held last scene stays on). Prints the PNG path, the sentence spoken then with the phrases it is anchored on, and what the engine measured on the frame (where the ink is, how much room is left on each side, and any text crossed, overlapped, past an edge or under the captions). sheet shows each frame at a third of that, where small text and sparse scenes look fine seconds
qa doc.tsx overflow, clipping, text over text or cut by a shape, text under captions, a target no part registers, anchors on a weak alignment, on sampled frames; exit 1 on any issue seconds
render doc.tsx [--theme visotalk/light] [--scale 2] [--concurrency N] [--png] [--gpu] the video of the first output, or of the one named: .visotalk/<id>/out/final.mp4 (roughly 3 to 8 s per second of video on four cores; --scale 2 paints the same layout at twice the pixels, 3840 x 2160 for 16:9, and a <canvas> part sizes its backing store by devicePixelRatio to stay as sharp; it renders with as many browsers as the machine's cores and memory and the frames allow (30 each, at most 16; it says how many, and --concurrency N chooses), its frames go to the encoder as JPEG (--png for PNG, with --frames to keep them), it renders in segments of 3000 frames, kept in out/segments/ until the video is joined, so the same command run again after an interruption skips the segments already done (segments made with another document, option or Chrome stay beside and are not used), and --gpu draws on the machine's GPU when Chrome reaches one, which it says in its log, at the cost of pixels that differ from machine to machine). It needs the real narration, and stops while an animation names a target no part registers. Captions are painted on the picture unless the document says exports={{captions: 'sidecar'}}: then they are left off it (and off the player) and written as out/captions.srt (five words a cue), the track to upload with the video; 'words' paints the spoken words as a block in the lower half of a tall (9x16) frame, each word appearing as it is said, so keep the pictures in the upper half (y 160 to 980 of 1920) minutes
play doc.tsx the interactive web player
export doc.tsx [--out talk.visotalk] [--cover pic.jpg] [--player] / import talk.visotalk [dir] [--remix] / play talk.visotalk the talk as one file (the document, the files it uses, its narration when prepared, captions, credits) and back into a new directory; an imported talk is checked like any document and nothing in it runs. --player makes the built talk instead (it needs the narration; it plays, with no document in it) and play serves such a file as a page. A voice module (voice="./x.mjs:…") is code that runs with your keys: import refuses it unless you read it and pass --allow-voice-module seconds
build doc.tsx --artifact [--out DIR] the player for a Claude artifact: the narration and the sounds mixed into one MP3, as render mixes them, the faces the document names or its CJK default embedded as files beside the page (otherwise the system's font), player.html (the page) and artifact.json (the files to publish with it). Publish it with the Artifact tool instead of rendering an MP4 when you only need to look at the result seconds

Another language of a document is doc.<lang>.json beside it (references/markup.md, "Languages"): every command but export takes --lang en and works on the document in that language, with its own narration in .visotalk/<id>-<lang>/.

sheet, still, qa and render each use Chrome and take turns: one started while another is running prints waiting for another visotalk run to finish with Chrome and waits, so run them one after another, not in parallel, and give each a tool timeout of minutes, not seconds. --out of still, sheet and qa is a PNG name inside the document's work folder (.visotalk/<id>/), or an absolute path. Let the narration finish (init and the first sheet, still or qa start it in the background; prepare runs it in front) before the first qa: until then every line is timed from its words, so qa reports align.estimated and the timings it checks are estimates.

build, play, qa, render and sheet run prepare first whenever KOKORO_DIR (or --tts-models) is set; clips are cached, so it
is quick when no line changed. Without a model they reuse the existing voice.json and say so.

Principles

What a good video does. How to write it is in references/; a rule here says what must be true, not which tag makes it so.

  1. A thing is on screen only from the word that names it. Never show the whole picture at the start of a line and then highlight its parts: a highlight is not an appearance, and the viewer has already seen it. Build the picture up, one entrance per word.
  2. One visible change per sentence, on the word that names its subject: the noun or the figure, not the start or the end of the sentence. A sentence that names two things is two changes on two words, not one object that shows both.
  3. Every object appears for a reason the narration gives, and does not stay after the line that needed it.
  4. Give everything time to be seen and understood: at least two seconds from when it appears to when it goes, and the last picture of a scene stays after the narration ends. A flash is allowed only when it is the point, and the design says so.
  5. Motion means something. An arrival says "here is a new thing", a growth says "this quantity", a slide or morph says "this became that", a draw says "this leads there". A thing that grows, moves, replaces or becomes does that on screen: an entrance that pops is not that motion. A quantity that matters is shown changing (a figure that counts, a bar that grows to its length). Motion that means nothing is decoration: leave it out.
  6. One subject on stage at a time. What a sentence replaces leaves, or moves into the new thing, before the new thing arrives; never show the before and after in one frame unless the sentence compares them. Things that merge go into each other without overprinting.
  7. Show the thing, not a label for it. A sentence about a command points at the command and what it prints; about a file, at its contents; about a number, at the quantity it measures. For a feeling or a situation, draw a metaphor. Draw what carries the sentence; an aside stays in the narration. Where a familiar mark exists (a name, a product, a kind of thing), show it beside the name.
  8. Never what a slide deck would give. A title, cards or chips on a grid with fade and slide entrances is page layout plus entrance animation. Each scene has a visual idea specific to its subject, real hierarchy, composition and negative space; a picture that fills a third of the frame with small text is not laid out yet.
  9. A pointer is easy to read. An arrow, a bracket, a callout or a label that refers to the picture makes clear what it refers to: the line, the shape and the text are placed so that a viewer sees the connection at once. It need not touch what it explains; one that points at nothing in particular, or a label that seems to belong to nothing, confuses.
  10. A picture continues, it is not redrawn. A picture that goes on over several sentences is one part with its numbers tweened, or the same elements moved or changed. A scene's parts end with it: a picture that goes on into the next scene is declared again there (a component, one line) and starts from its base props, or is a global part in <Doc>.
  11. The narration is in the lines, not in the drawing: what is said is a <Line> (its caption comes from it), and a part draws the graphic and the short labels that belong to it (names, figures). A sentence drawn inside a part is invisible to the anchors and to the captions; a label a translation must change is drawn with useText.
  12. Text is short: a label is a phrase, a figure a number and a name. Long sentences are the caption's job.
  13. Be honest. Never invent a measured number or claim a result nobody measured. An example the viewer is told is an example (the plausible output of a command a line names) is not a measurement: draw it. Narration is fixed audio: never state a value that depends on a param.
  14. Material is licensed and local. Every image, clip and sound is a declared asset with its licence and source, kept in the project's library; credits are generated. Rules: references/assets.md.
  15. Know what a scene shows before you draw it, sentence by sentence: what is on stage, what arrives or leaves, which word fires it. Then check the picture against that.

Workflow

There is no fixed procedure and nothing refuses a step: validate and render stop only for things that are wrong (a syntax error, an animation target no part registers, narration not ready). Planning, looking and judging are yours. A way that works:

  1. Gather what the video states: facts, numbers, real command output.
  2. Script the narration as short lines, one idea each. Write numbers as words in the line (three hundred bytes; put the digits in the caption with text="… 300 bytes"): a digit token gets no time of its own. Show the script to the person before building if they are there to answer. Then visotalk init doc.tsx --lines lines.json: you get a valid skeleton with the narration already being prepared, and sheet shows the first frames at once.
  3. Decide what each scene shows before you draw it, in whatever form helps you (notes, a storyboard in the conversation). Questions worth asking, in this order:
    - The thing itself. What does each sentence point at in the world (principle 7)? The concrete things to put on screen (real names, lines, values), what each says that a word would not, which would be better as a real picture or logo you fetch (references/assets.md), or the metaphor for a feeling or a situation.
    - Ideas. At least two ways to show the scene that differ in kind, not the same boxes in two colours. A row of cards and a title is what anyone reaches for; set it beside something a slide deck cannot do (a metaphor drawn for this subject, a picture driven by the numbers, one object that becomes another, a change of scale) and pick on what a viewer who has never heard of the subject would understand.
    - Board. The chosen picture sentence by sentence: layout and sizes in px, clear of the captions (below y 900), what arrives, moves or leaves, on which word, and what continues from the previous scene.
  4. Draw one scene, look, then plan the next: one <Scene> per idea, one <Line> per sentence, one <Part> per picture (its box is yours), the animation once the picture exists (references/markup.md, parts.md; visotalk schema lists the tags, motions and hooks). validate and fix every issue; each points at doc.tsx:line:col, most carry a fix, --json gives them as data. What you see in one scene (how big a label has to be, how much room a picture takes) decides how you design the next, so avoid drawing the whole video before looking at any of it.
  5. Look. sheet shows every line at a third of the size and is the quick survey; still is the full-size frame at any moment, with what the engine measured on it, and the one that tells you whether a label can be read and whether a scene is crowded or bare. Which frames, how many and what to look for is your call: the moment a word fires, the end of a long scene, the busiest frame, a frame after a change. Read the PNG (Read tool) as a viewer who has not seen your plan: could a slide deck have made it, is the thing the sentence names on screen and big enough, is anything crossed, cut off or empty by accident? Redraw what fails. The narration is prepared in the background and lines are timed from their words until it is ready, so a word anchor can move when it lands.
  6. qa for what you miss (an object on screen for under two seconds, overflow, text crossed or over text, a target nothing registers, a weak anchor); it cannot see whether a picture matches its sentence. render once you would publish it.

Pace and scope

Time is finite and the document in doc.tsx when it ends is the whole deliverable, so a plan that polishes first and completes later can deliver nothing. Three habits that hold for any model:

  • Scope to the length asked. Narration runs at about 2.8 words a second, so 45 seconds is about 120 words (a scene adds 1.2 s of lead and tail to the narration, so a film of thirteen scenes runs 15 s longer than its lines: count them in): four or five scenes of eight to ten seconds (principle 4 needs two seconds per object, and a scene needs room for its picture), not ten. More scenes only for a longer video.
  • Have a whole document early. Once the first scene is drawn and looked at, draw the rest simply (one honest picture per scene, its animation anchored), run validate and qa, and fix what they say, within the first third of the time you have. Then spend what is left on the scenes that are weakest. A complete, plain document is a video; a half-polished one is not.
  • Look with a question. A still answers one question (can this label be read at this size, is the scene crowded). Re-rendering the same moment after a one-pixel change is not looking: use sheet to survey, a few stills for the scenes you doubt, and qa (seconds) for what it measures.

Techniques

How to make each of the above is in references/, one file per kind of question:

  • markup.md: the syntax of doc.tsx, parts, targets, anchors, motions, qa and known gotchas.
  • parts.md: drawing a part: CSS layout, data-driven pictures, motion by a number, SVG, theme tokens.
  • assets.md: finding, keeping and declaring material from the internet.
  • explainers.md: a video that reports what a source found, and a series of them: the first frame and covers, a phone screen, a long film's chapter rail, illustrations, honest pictures, the independent check, delivering a player or a video.
  • scripts/: review-frames.mjs (one frame per narrated line, cut for reviewers).

常见问题

5 问
答案由本站依据条目字段整理
旁白讲解视频脚本渲染怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_85361895/visotalk。安装方式为未标注。装完刷新技能列表或重开客户端。

旁白讲解视频脚本渲染支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

旁白讲解视频脚本渲染权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

旁白讲解视频脚本渲染收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

旁白讲解视频脚本渲染用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。