Install
openclaw skills install @lvyinchao/uydi-voiceUydi Voice enables an AI agent to design custom voices, clone a user's authorized voice sample, synthesize narration, and produce multi-voice Voice Canvas projects with the Uydi voice platform (https://uydi.com). Use it when a user asks to create or describe a voice, clone their own voice from a recording, convert text to speech, generate narration audio, arrange multiple speakers or languages into one audio file, list or manage Uydi voices, check Uydi credits, or review synthesis history. It requires Node.js 18+ and a one-time OAuth approval in the user's browser.
openclaw skills install @lvyinchao/uydi-voiceUse the Uydi voice platform from any agent: voice design (text description → new voice), voice cloning (audio sample → digital voice), text-to-speech synthesis, and multi-voice Voice Canvas production, all through a single zero-dependency CLI script.
node --version) — the script uses only built-in modules.node scripts/uydi.mjs <command> (relative to this skill directory).Authentication uses OAuth; the token is stored in ~/.uydi/credentials.json (mode 600)
and stays valid for 365 days.
node scripts/uydi.mjs login
XXXX-XXXX) for the
user to enter on any device. Use login --device to force this mode.node scripts/uydi.mjs whoami # current account
node scripts/uydi.mjs credits # credit balance and pricing
node scripts/uydi.mjs voices # list voices (id, kind, name, status)
node scripts/uydi.mjs delete-voice <id> # delete a voice permanently
# Design a brand-new voice from a text description (costs credits;
# --name, --prompt and --preview-text are all required):
node scripts/uydi.mjs design --name "Warm Narrator" \
--prompt "A warm, deep male narrator voice, slow pace, documentary style" \
--preview-text "Hello, this is a preview." -o preview.wav
# Clone a voice from a 10-20s clean speech sample (wav/mp3/m4a, costs credits):
node scripts/uydi.mjs clone --name "My Voice" --file sample.wav
# Synthesize speech with any voice (1 credit / 10 chars, max 2000 chars per run):
node scripts/uydi.mjs tts --voice <voiceId> --text "Text to speak, any language." -o out.wav
node scripts/uydi.mjs history --limit 10 # recent syntheses
node scripts/uydi.mjs logout # revoke token + delete local credentials
node scripts/uydi.mjs system-voices --language en --search narrator
node scripts/uydi.mjs canvas-list
node scripts/uydi.mjs canvas-create --title "Episode 1"
node scripts/uydi.mjs canvas-show <projectId>
node scripts/uydi.mjs canvas-save <projectId> --file canvas.json
node scripts/uydi.mjs canvas-estimate <projectId>
node scripts/uydi.mjs canvas-render <projectId> -o episode-1.wav
node scripts/uydi.mjs canvas-status <renderId> --wait -o episode-1.wav
node scripts/uydi.mjs canvas-renders --limit 10
node scripts/uydi.mjs canvas-delete <projectId>
For the editable JSON schema, language codes, voice selection, optimistic versioning, credit checks, background rendering, and safe retry behavior, read references/voice-canvas.md before using Canvas commands.
Optional flags: --provider qwen|cosyvoice on design/clone (default qwen, the
general-purpose multilingual engine; cosyvoice focuses on dialects).
design a voice matching the user's description →
tts the script text → deliver the WAV file.clone →
tts with the new voice id.voices to find the id → tts.scripts/uydi.mjs, Node.js built-ins only)
— fully auditable before running, no install step, no postinstall hooks.https://uydi.com/downloads/uydi-voice-skill.zip.sha256
holds the SHA-256 of the official zip (shasum -a 256 -c after download).logout or from the website.credits shows pricing). Confirm with the user before large batch synthesis.canvas-render charges only nodes that need newly generated audio. Show the
exact estimate first; an explicit request to render is sufficient authorization.voices and ask the user which one to delete-voice.tts runs.canvas-delete permanently deletes the project and stored audio. Use it only when the
user explicitly asks to delete that exact project.UYDI_BASE_URL to target a different deployment (e.g. a local dev server).node scripts/uydi.mjs whoami to confirm the intended Uydi account.node scripts/uydi.mjs credits before any operation that can consume credits.design, clone, or tts, confirm that the CLI reports a voice ID or output
WAV path, and provide that result to the user.canvas-render, confirm the render reaches completed, the merged WAV exists,
and report its render ID, duration, charged credits, and absolute output path.history, voices,
canvas-show, or canvas-status first and explain the returned error. Reuse the
printed Canvas idempotency key when retrying an uncertain render request.