Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add perso-ai/perso-dubbing-plugin --skill dubbinggit clone --depth 1 https://github.com/perso-ai/perso-dubbing-pluginWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/perso-ai/perso-dubbing-plugin/dubbing)<a href="https://agentmods.dev/skills/perso-ai/perso-dubbing-plugin/dubbing"><img src="https://agentmods.dev/badge/skills/perso-ai/perso-dubbing-plugin/dubbing/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/perso-ai/perso-dubbing-plugin/dubbing"><img src="https://agentmods.dev/badge/skills/perso-ai/perso-dubbing-plugin/dubbing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium MCP Rug Pull · line 158 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00026 | $0.07205 |
| Opus 5.5 | $0.00010 | $0.02882 |
| Sonnet 5.5 | $0.00005 | $0.01441 |
| Haiku 4.5 | $0.00003 | $0.00720 |
Grade A, and why
dubbing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 213 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/dubbing
A skill that auto-dubs videos via the Perso AI Dubbing API.
Core rules (must follow)
- Only the worker sees the raw key. Never open the key with
Read, echo it, or pass it as a command-line argument. Workers send it in theXP-API-KEYheader only. - One command = the whole job.
scripts/dubbing.mjshandles upload · split · translate · merge · save by itself. Never runprepare_input.mjsorprobe_split.mjsbefore it — they are debug tools, andprobe_split.mjsperforms a real upload (the video would upload twice). - Always run
dubbing.mjsin the background. Jobs take minutes to hours; a foreground shell timeout kills the run mid-way. - Languages unspecified → source
auto, targeten. - Multiple languages go in one command (
--target en,zh,ja) — upload/split happens once and is reused per language. Never run once per language (re-uploads the source each time). - Relay progress faithfully. Surface the worker's stdout
[progress]lines to chat, verbatim or summarized — and don't announce steps that didn't appear (splitting/merging exist only for over-limit videos). The indented stderr detail logs don't need relaying. - Keep the user informed while it runs. Dubbing, lip-sync, and audio separation all print a
[status]heartbeat (stage + item counts, e.g.ja 4/6 · en 1/6orseparating — file 2/5, with anext check ~Nmhint), and each finished item streams as a[progress]line. Check the background output ~3 minutes after launch, then on the hinted interval (10 min for media ≤10 min, 30 min for longer): relay any new[progress]line right away, otherwise post the latest[status]line as a one-line update. Never invent percentages, elapsed time, or ETAs — relay only what the lines say. Stops that need the user ([space-select],[split-confirm],[free-limit],[model-plan],[model-select],[resume-check],[credit-check], credit-out, completion) end the process, so they surface without polling. - Name your runtime for telemetry (silent). Add
--host <claude-code|codex|cursor|antigravity|gemini>to the worker command, naming the agent you are running as, if you can tell. It only tags usage telemetry — never surface it to the user and never ask them about it. Omit it if unsure. - Voice model — mention only when asked. Never bring up TTS voice models or
--tts-modelon your own: run with the default and say nothing about models in kickoff lines, progress, or the final report. Explain the models and let the user choose only when the user asks about voice models / voice engines, or the worker prints a[model-plan]or[model-select]line. When the user names a model ("use Nightingale"), don't explain or ask — state its price in one line and run it right away — see Voice model. - Unsupported formats are skipped automatically and the rest keep processing — relay the skip notice.
- A pause is not a failure. A
[space-select],[split-confirm],[free-limit],[model-plan],[model-select],[credit-check], or[resume-check]line means the run stopped to ask you something — it exits 0 (so it never looks like an error), but the job is not complete. Whenever one of these lines is present, never report the run as done: relay it and act on it. The lines are the signal, not the exit code.
What ships with it
32 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- agents/openai.yaml 224 B
- lib/api_adapter.mjs 19 KB runs code
- lib/billing.mjs 6.6 KB runs code
- lib/client_info.mjs 3.4 KB runs code
- lib/config.mjs 3.3 KB runs code
- lib/ffmpeg.mjs 12 KB runs code
- lib/gates.mjs 9.6 KB runs code
- lib/http_client.mjs 3.5 KB runs code
- lib/input.mjs 4.6 KB runs code
- lib/languages.mjs 5.2 KB runs code
- lib/mask.mjs 255 B runs code
- lib/merge.mjs 5.4 KB runs code
- lib/messages.mjs 5.1 KB runs code
- lib/scheduler.mjs 26 KB runs code
- lib/space.mjs 5.3 KB runs code
- lib/split.mjs 11 KB runs code
- lib/status.mjs 1.1 KB runs code
- lib/telemetry.mjs 16 KB runs code
- lib/tmp.mjs 741 B runs code
- lib/tts_models.mjs 2.9 KB runs code
- lib/update_check.mjs 3.4 KB runs code
- lib/web_attribution.mjs 7.2 KB runs code
- scripts/billing.mjs 13 KB runs code
- scripts/check_deps.mjs 2.1 KB runs code
- scripts/connect.mjs 7.9 KB runs code
- scripts/dubbing.mjs 93 KB runs code
- scripts/languages.mjs 776 B runs code
- scripts/merge.mjs 396 B runs code
- scripts/prepare_input.mjs 385 B runs code
- scripts/probe_split.mjs 1022 B runs code
- scripts/resolve_key.mjs 12 KB runs code
- scripts/speaker.mjs 25 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago Changed · +2 lines f7323c58007d
- 26d ago Changed · +27 lines a0f4f32d5c84
- 1mo ago First seen · 184 lines · 26 tokens per session scan A 4730589af0ce
dubbing is a skill published in the GitHub repository perso-ai/perso-dubbing-plugin (40 stars, last pushed 12d ago), licensed MIT. It adds 26 tokens to every session and 7,205 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
chinese-documentation
A Chinese technical-documentation style guide covering spacing, punctuation, numbers, terminology, and links when Chinese and English appear together.
oma-translation
Translate or revise localized UI strings and prose while preserving meaning, terminology, placeholders, and structure.
speak-human-tw
A Traditional Chinese editing guide for making public-facing writing sound more natural and less machine-generated. It also checks wording associated with Mainland China and half-width punctuation.
page-metadata
When the user wants a full-page metadata audit or implementation across discovery, search intent, title, description, canonical, robots, hreflang, Open Graph, Twitter Cards, code or CMS changes, build validation, rendered HTML, production verification, localization, or post-release observation. Also use for "metadata…
localization-strategy
Plan, audit, implement, migrate, or validate localization for multilingual products and websites, including locale scope, market readiness, URL architecture, content coverage, hreflang coordination, rollout, and production verification. Use translation for the actual translation, glossary, and language review work.
translation
Translate, transcreate, review, or maintain multilingual product and marketing content, including source locking, glossary decisions, language style, machine-assisted workflows, legal-content safeguards, QA, and source-change synchronization. Use localization-strategy for market scope, locale architecture, rollout…