Implement ElevenLabs speech-to-speech, sound effects, audio isolation, and speech-to-text. Use when converting one voice to another, generating sound effects from a text description, removing background noise from a recording, or transcribing audio. Trigger with "elevenlabs speech to speech", "voice changer", "sound effects", "audio isolation", "remove background noise", "elevenlabs transcribe".
Scanned 9/2/2026
Install to Claude Code
npx -y skills add jeremylongshore/tons-of-skills-marketplace --skill elevenlabs-core-workflow-b --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Elevenlabs Core Workflow B?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeremylongshore-elevenlabs-core-workflow-b-tons-of-skills-marketplace)More formats (shields.io, HTML) on the badges page.
---
name: elevenlabs-core-workflow-b
description: |
Implement ElevenLabs speech-to-speech, sound effects, audio isolation, and
speech-to-text.
Use when converting one voice to another, generating sound effects from a text
description, removing background noise from a recording, or transcribing audio.
Trigger with "elevenlabs speech to speech", "voice changer", "sound effects",
"audio isolation", "remove background noise", "elevenlabs transcribe".
allowed-tools: Read, Write, Bash(npm:*), Bash(curl:*)
version: 1.6.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- voice
- ai
- elevenlabs
- speech-to-speech
- sound-effects
- audio-isolation
compatibility: Designed for Claude Code
---
# ElevenLabs Core Workflow B — Speech-to-Speech, Sound Effects & Audio Isolation
## Overview
Secondary ElevenLabs workflows beyond TTS: (1) Speech-to-Speech voice conversion,
(2) Sound Effects generation from text descriptions, (3) Audio Isolation for noise
removal, and (4) Speech-to-Text transcription. Each maps to one API endpoint and
has both a TypeScript SDK and a cURL path.
Full code for every step lives in [references/implementation.md](references/implementation.md);
copy-ready invocations are in [references/examples.md](references/examples.md).
## Prerequisites
- Completed `elevenlabs-install-auth` setup.
- For STS: source audio file in MP3/WAV/M4A format.
- For audio isolation: noisy audio file to clean.
## Authentication
The SDK client (`new ElevenLabsClient()`) reads the API key from the
`ELEVENLABS_API_KEY` environment variable automatically — never hardcode it. cURL
requests send it as the `xi-api-key: ${ELEVENLABS_API_KEY}` header. Full auth setup
is covered by the `elevenlabs-install-auth` skill.
## Instructions
Import the SDK once, then call the relevant module. The client authenticates from
the environment:
```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { createReadStream, createWriteStream } from "fs";
import { Readable } from "stream";
import { pipeline } from "stream/promises";
const client = new ElevenLabsClient();
```
1. **Speech-to-Speech (voice changer)** — `client.speechToSpeech.convert(voiceId, …)`
against `POST /v1/speech-to-speech/{voice_id}`. Use `model_id: "eleven_english_sts_v2"`
and set `remove_background_noise: true` for built-in cleanup.
2. **Sound Effects** — `client.textToSoundEffects.convert({ text, … })` against
`POST /v1/sound-generation`. Tune `duration_seconds` (0.5–30) and
`prompt_influence` (0–1; higher follows the prompt more closely).
3. **Audio Isolation** — `client.audioIsolation.audioIsolation({ audio })` against
`POST /v1/audio-isolation`, or the streaming variant for large files.
4. **Speech-to-Text** — `client.speechToText.convert({ audio, model_id: "scribe_v1" })`
against `POST /v1/speech-to-text`; optionally enable `diarize` and word timestamps.
Each returns an audio stream (steps 1–3) piped to disk, or a transcript object
(step 4). See [references/implementation.md](references/implementation.md) for the
complete helper functions and cURL equivalents.
### First example — Speech-to-Speech skeleton
```typescript
async function speechToSpeech(sourceAudioPath, targetVoiceId, outputPath) {
const audio = await client.speechToSpeech.convert(targetVoiceId, {
audio: createReadStream(sourceAudioPath),
model_id: "eleven_english_sts_v2",
voice_settings: JSON.stringify({ stability: 0.5, similarity_boost: 0.8 }),
remove_background_noise: true,
});
await pipeline(Readable.fromWeb(audio as any), createWriteStream(outputPath));
}
```
## API Endpoint Summary
| Feature | Method | Endpoint | Billing |
|---------|--------|----------|---------|
| Speech-to-Speech | POST | `/v1/speech-to-speech/{voice_id}` | Per character |
| Sound Effects | POST | `/v1/sound-generation` | Per generation |
| Audio Isolation | POST | `/v1/audio-isolation` | 1,000 chars/min of audio |
| Audio Isolation Stream | POST | `/v1/audio-isolation/stream` | 1,000 chars/min of audio |
| Speech-to-Text | POST | `/v1/speech-to-text` | Per audio minute |
## Output
- **Steps 1–3** write an audio file to the `outputPath` you pass and log a
confirmation, e.g. `Voice-converted audio saved to converted.mp3` or
`Clean audio saved to clean_interview.mp3`.
- **Step 4** returns a transcript object: `result.text` holds the full
transcription, and `result.words` (when present) carries word-level
`{ start, end, text }` timestamps.
- cURL paths stream the resulting audio directly to the `--output` file.
## Error Handling
| Error | HTTP | Cause | Solution |
|-------|------|-------|----------|
| `model_can_not_do_voice_conversion` | 400 | Wrong model for STS | Use `eleven_english_sts_v2` |
| `audio_too_short` | 400 | STS input under 1 second | Use longer audio clip |
| `audio_too_long` | 400 | STS input over limit | Trim to under 5 minutes |
| `invalid_sound_prompt` | 400 | Nonsensical SFX description | Write descriptive, specific prompts |
| `file_too_large` | 413 | Audio isolation over 500MB | Compress or split the file |
| `quota_exceeded` | 401 | Character/generation limit hit | Check usage dashboard |
## Examples
Worked, copy-ready invocations for all four workflows — including the three
sound-effect variants (rain, laser, seamless forest loop), the "Rachel" voice
conversion, an audio-isolation clean-up, and a transcription with word timestamps —
are in [references/examples.md](references/examples.md). A one-liner:
```typescript
// Generate a 10-second rain sound effect, faithful to the prompt
await generateSoundEffect(
"Heavy rain on a tin roof with distant thunder",
"rain.mp3",
{ duration: 10, promptInfluence: 0.6 }
);
```
## Resources
- [Full implementation walkthrough](references/implementation.md) — every step's
SDK + cURL code, sound-effect tips, and audio-isolation limits.
- [Worked examples](references/examples.md) — copy-ready invocations per workflow.
- [Speech-to-Speech API](https://elevenlabs.io/docs/api-reference/speech-to-speech/convert)
- [Sound Effects API](https://elevenlabs.io/docs/api-reference/text-to-sound-effects/convert)
- [Audio Isolation API](https://elevenlabs.io/docs/api-reference/audio-isolation/convert)
- [Speech-to-Text API](https://elevenlabs.io/docs/api-reference/speech-to-text/convert)
## Next Steps
For common errors, see `elevenlabs-common-errors`. For SDK patterns, see `elevenlabs-sdk-patterns`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!