---
name: dubnivo
description: Dub a video into another language in the speaker's own voice, cut a long video into short captioned clips, or merge videos, using the user's Dubnivo account. Use when the user asks to translate, dub, re-voice or localise a video, to make shorts or clips from a video, to merge videos, or to get subtitles for a dubbed video.
---

# Dubnivo

Dubnivo (https://dubnivo.com) translates the speech in a video and re-voices it in a voice cloned from the original speaker. This skill drives it through a one-file command-line tool. Processing happens on Dubnivo's servers; the tool uploads, waits and downloads.

## Before you start

1. The tool is at `~/.dubnivo/dubnivo.mjs` and needs Node 18 or newer. If it is missing, follow https://dubnivo.com/agents/install.md.
   In Windows PowerShell or cmd, `~` is not expanded for Node: write the path as `$HOME\.dubnivo\dubnivo.mjs` (PowerShell) or `%USERPROFILE%\.dubnivo\dubnivo.mjs` (cmd) in every command below.
2. Run `node ~/.dubnivo/dubnivo.mjs whoami --json`. If it reports that there is no API key, ask the user to create one at https://dubnivo.com/account (section "API keys") and to run `node ~/.dubnivo/dubnivo.mjs login` themselves in a terminal. Do not ask them to paste the key into the chat, and never print, log or commit a key.
3. `whoami` also shows the plan and how many videos are left this month. Every dub, clip set or merge uses one video from the monthly allowance, so say what you are about to start when the allowance is small.

## Commands

Always add `--json`: the result is then one line of JSON on standard output, and progress goes to standard error.

| Task | Command |
|---|---|
| Dub a video | `node ~/.dubnivo/dubnivo.mjs dub <file-or-link> --to <lang> --json` |
| Short clips from a long video | `node ~/.dubnivo/dubnivo.mjs clips <file-or-link> --json` |
| Short clips, dubbed | `node ~/.dubnivo/dubnivo.mjs clips <file> --to <lang> --json` |
| Merge two to six videos | `node ~/.dubnivo/dubnivo.mjs merge <file> <file> [...] --json` |
| Merge and dub | `node ~/.dubnivo/dubnivo.mjs merge <file> <file> --to <lang> --json` |
| Subtitles of a finished dub | `node ~/.dubnivo/dubnivo.mjs subtitles <id> [--source] [--format vtt]` |
| Check on a video | `node ~/.dubnivo/dubnivo.mjs status <id> --json` |
| Wait for it and download | `node ~/.dubnivo/dubnivo.mjs wait <id> --json` |
| Recent videos | `node ~/.dubnivo/dubnivo.mjs list --json` |
| Supported languages | `node ~/.dubnivo/dubnivo.mjs languages --json` |

Options: `--from <lang>` names the spoken language (default: detected automatically, which is usually right); `--out <path>` chooses where the result is saved (a file, or a folder for clips); `--original` keeps clips in the video's own shape instead of vertical; `--no-wait` returns the id at once.

Languages are two-letter codes such as `en`, `es`, `fr`, `de`, `pt`, `ar`, `hi`, `zh`, `ja`, `ko`, `ru`. Run `languages` when unsure: a video can be spoken in more languages than it can be dubbed into.

## Long jobs

A one-minute video takes roughly 10 to 30 minutes, longer when the queue is busy, and paid plans are served first. For anything but a very short video:

1. Start with `--no-wait` and keep the `id` from the JSON.
2. Tell the user it has started and give them the `page` link from the JSON, where they can watch progress.
3. Later, run `wait <id> --json` (it blocks until the video is finished and downloads it) or `status <id> --json` to look without waiting.

Do not start the same video again because it is slow: that uses another video from the allowance.

## Reading the result

Success looks like `{"id": "...", "status": "done", "files": ["/path/to/talk.es.mp4"], "page": "https://dubnivo.com/jobs/..."}`. `files` are the downloaded results; tell the user where they are.

A failure exits with a non-zero code and prints `{"error": "..."}`. The message is written for the user: pass it on as it is. Common ones:

- The video is already in the language chosen: pick a different `--to`.
- The video is longer or larger than the plan allows: say so and name the plan from `whoami`; do not try to split the video to get round the limit.
- The monthly allowance is used up: the user can upgrade at https://dubnivo.com/pricing.
- No speech was heard: the video may be silent or music only.

## Rules

- Only dub videos the user owns or has permission to translate, and only clone a voice with the speaker's consent. If the user asks to impersonate someone or to put words in a real person's mouth, decline: Dubnivo's terms forbid it.
- Results are produced automatically and can contain mistakes. Suggest that the user watches a dub before publishing it.
- Links are accepted from TikTok, Instagram, X, Facebook and Twitch. For anything else, including YouTube, the user needs the video as a file.
- Files on Dubnivo are deleted automatically after a few days (3 on Free, 14 on Pro, 30 on Premium), so download what should be kept.
