Skip to content
Skill Authoring
Skill

/venice-audio-voice-changer

Async speech-to-speech voice conversion via Venice — re-record a source recording in a different voice while keeping delivery and timing. Covers POST /audio/voice-changer/quote (unauthenticated), /queue (multipart file or JSON audio_url), /retrieve and /complete, how to discover

BOOST
From plugin
venice
15422 skills
Install
$ npx -y skills add veniceai/skills --skill venice-audio-voice-changer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/venice-audio-voice-changer

Context preview

The summary Claude sees to decide when to auto-load this skill.

Async speech-to-speech voice conversion via Venice — re-record a source recording in a different voice while keeping delivery and timing. Covers POST /audio/voice-changer/quote (unauthenticated), /queue (multipart file or JSON audio_url), /retrieve and /complete, how to discover

SKILL.md

venice-audio-voice-changer.SKILL.md
name: venice-audio-voice-changer
description: Async speech-to-speech voice conversion via Venice — re-record a source recording in a different voice while keeping delivery and timing. Covers POST /audio/voice-changer/quote (unauthenticated), /queue (multipart file or JSON audio_url), /retrieve and /complete, how to discover voice-changer models (model_spec.voice_changer on /models?type=music), accepted formats, the source-length cap, whole-minute billing, refunds, and what each endpoint refuses. Note that no voice-changer model is currently open to regular API keys.

Venice Voice Changer (`/audio/voice-changer/*`)

Speech-to-speech conversion: upload a recording, get the same speech back in a different voice, with the original pacing, emotion and timing preserved. It's asynchronous, with its own quote → queue → retrieve → complete family (parallel to, but separate from, [`venice-audio-music`](../venice-audio-music/SKILL.md)).

> **Availability (checked 2026-09-30):** the endpoints are in the public API spec, but the only voice-changer model, `elevenlabs-voice-changer`, is not yet open to regular API keys. It is not listed by `GET /models`, and regular keys (or no key) get `404 "Specified model not found"` from every endpoint below. Before using this skill, confirm that a model with `model_spec.voice_changer: true` shows up in `GET /models?type=music` for your key; if none does, the feature isn't available to you.

| Method | Path | Auth | Notes | |---|---|---|---| | `POST` | `/api/v1/audio/voice-changer/quote` | **None required** (key optional) | Price for a source of N seconds. | | `POST` | `/api/v1/audio/voice-changer/queue` | Bearer key or x402 (SIWX) | `multipart/form-data` (`file`) **or** JSON (`audio_url`). Charges and enqueues. 40 req/min per user. | | `POST` | `/api/v1/audio/voice-changer/retrieve` | Bearer key or x402 (SIWX) | Status JSON or the converted audio. 120 req/min per user. | | `POST` | `/api/v1/audio/voice-changer/complete` | Bearer key or x402 (SIWX) | Release the provider-held media. |

Each endpoint only accepts voice-changer models (`400` otherwise, naming the endpoint to use instead), and `/audio/quote`, `/audio/queue`, `/audio/retrieve`, `/audio/complete` refuse voice-changer models the same way.

Use when

  • You have a real recording (voice-over, dialogue, a take) and want it in another voice without re-performing it.
  • You want to keep the timing of the original exactly — e.g. dubbing against picture.

For text → speech use [`venice-audio-speech`](../venice-audio-speech/SKILL.md); to create a reusable voice from a sample, see voice cloning there.

Discover models

There is no `?type=voice-changer` filter. Voice-changer models are music-type models whose `model_spec` carries:

| Field | Meaning | |---|---| | `voice_changer` | `true` on voice-changer models only. | | `accepted_audio_formats` | Containers accepted for the source, judged from the file's bytes (not its name or `Content-Type`). `mp4` covers M4A. | | `max_source_audio_duration_seconds` | Longest source accepted; longer → `422` before any charge. | | `supports_background_noise_removal` | Whether `remove_background_noise` is honored. | | `supports_seed` | Whether `seed` is honored. | | `voices`, `default_voice`, `supports_custom_voice_id` | Target voices; with `supports_custom_voice_id: true` you may pass a provider Voice ID. | | `pricing.durations` | Whole-minute price tiers keyed by source length. |

`elevenlabs-voice-changer` supports: formats `mp3`, `wav`, `ogg`, `mp4`, `aac`; max source 300 s; noise removal and seed supported; the curated ElevenLabs voices (`Aria` default, `Roger`, `Sarah`, …) or any ElevenLabs Voice ID; output `mp3`. Read its price tiers from `pricing.durations` rather than hard-coding them.

Lifecycle

1. `POST /audio/voice-changer/quote`

curl https://api.venice.ai/api/v1/audio/voice-changer/quote \
  -H "Content-Type: application/json" \
  -d '{ "model": "elevenlabs-voice-changer", "duration_seconds": 52 }'

Response: `{ "quote": <USD>, "duration_seconds": 52 }`.

| Field | Notes | |---|---| | `model` | Required. A voice-changer model. | | `duration_seconds` | **Required.** Positive integer or numeric string, ≤ `max_source_audio_duration_seconds`. |

This is an estimate for the length you declare. The actual charge uses the length Venice measures when you queue; if both round up to the same whole minute the price is identical.

2. `POST /audio/voice-changer/queue`

Supply the source **exactly once** — a multipart `file` or a JSON `audio_url`. Both or neither → `400`.

# Upload
curl https://api.venice.ai/api/v1/audio/voice-changer/queue \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -F "model=elevenlabs-voice-changer" \
  -F "file=@take-03.wav" \
  -F "voice=Roger" \
  -F "remove_background_noise=true"

# By URL
curl https://api.venice.ai/api/v1/audio/voice-changer/queue \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elevenlabs-voice-changer",
    "audio_url": "https://example.com/take-03.mp3",
    "voice": "Roger",
    "seed": 42
  }'

Response:

{ "model": "elevenlabs-voice-changer", "queue_id": "…", "status": "QUEUED", "duration_seconds": 52 }

`duration_seconds` is the source length measured server-side — the exact quantity billed.

| Field | Notes | |---|---| | `model` | Required. | | `file` | Multipart source recording, max 25 MB. | | `audio_url` | Public `http(s)` URL. Venice fetches it (30 s timeout, 25 MB cap), validates the bytes, and forwards only the bytes — the URL itself is never passed to the provider. | | `voice` | 1–60 chars. A curated voice or provider Voice ID. Defaults to `default_voice`. Not checked against `voices` at queue time — an unknown Voice ID fails with `400` at queue or on retrieve. | | `remove_background_noise` | Boolean (`"true"` / `"false"` in multipart). | | `seed` | Non-negative integer, for reproducible output. |

Read more
Ships withvenice

Agent Skills for the Venice API. Skills are self-contained folders of instructions (one SKILL.md each) that an LLM agent loads on demand to work correctly against a specific surface area of the API.

Get the whole plugin

Other skills on venice.