JavaScript/TypeScript SDK for Stem Splitter API - Easy audio stem separation
npm install stem-splitter-apiEasy-to-use JavaScript/TypeScript SDK for the Stem Splitter API. Separate audio files into stems (vocals, drums, bass, etc.) with just a few lines of code.
``bash`
npm install stem-splitter-apior
yarn add stem-splitter-apior
pnpm add stem-splitter-api
`typescript
import { StemSplitterClient } from 'stem-splitter-api';
import fs from 'fs';
// Create client
const client = new StemSplitterClient({
baseUrl: 'https://stem-splitter-api-production.up.railway.app'
});
// Separate audio file
const result = await client.separate('./audio.mp3', { stems: 2 });
// Save result
fs.writeFileSync('output.zip', result.data);
console.log(Saved: ${result.filename});`
Main client class for interacting with the Stem Splitter API.
#### Constructor
`typescript`
new StemSplitterClient(options?: StemSplitterOptions)
Options:
- baseUrl (string, optional): API base URL (default: 'https://stem-splitter-api-production.up.railway.app')timeout
- (number, optional): Request timeout in milliseconds (default: 300000 = 5 minutes)
#### Methods
##### separate(filePath, options?)
Separate an audio file from the file system.
Parameters:
- filePath (string): Path to the audio fileoptions
- (object, optional):stems
- (2 | 4 | 5): Number of stems (default: 2)
Returns: Promise
Example:
`typescript`
const result = await client.separate('./song.mp3', { stems: 4 });
##### separateFromBuffer(buffer, filename, options?)
Separate an audio file from a buffer.
Parameters:
- buffer (Buffer): Audio file bufferfilename
- (string): Original filenameoptions
- (object, optional):stems
- (2 | 4 | 5): Number of stems (default: 2)
Returns: Promise
Example:
`typescript`
const audioBuffer = fs.readFileSync('./song.mp3');
const result = await client.separateFromBuffer(audioBuffer, 'song.mp3', { stems: 2 });
##### healthCheck()
Check API health status.
Returns: Promise
Example:
`typescript`
const health = await client.healthCheck();
console.log(health.status); // "healthy"
console.log(health.disk_space_gb); // Available disk space
console.log(health.allowed_extensions); // [".flac", ".m4a", ".mp3", ...]
##### getInfo()
Get API information from root endpoint.
Returns: Promise
Example:
`typescript`
const info = await client.getInfo();
console.log(info.message); // "Stem Splitter API is running"
console.log(info.docs); // "/docs"
`typescript
import { StemSplitterClient } from 'stem-splitter-api';
import fs from 'fs';
import path from 'path';
async function main() {
const client = new StemSplitterClient({
baseUrl: 'https://stem-splitter-api-production.up.railway.app',
timeout: 600000, // 10 minutes
});
try {
// Check health
const health = await client.healthCheck();
console.log('API Status:', health.status);
console.log('Max file size:', health.max_file_size_mb, 'MB');
// Separate audio
console.log('Separating audio...');
const result = await client.separate('./input.mp3', { stems: 2 });
// Save output
const outputPath = path.join(__dirname, 'output.zip');
fs.writeFileSync(outputPath, result.data);
console.log(Saved to: ${outputPath});Request ID: ${result.requestId}
console.log();
} catch (error) {
console.error('Error:', error.message);
}
}
main();
`
`typescript
import { StemSplitterClient } from 'stem-splitter-api';
const client = new StemSplitterClient({
baseUrl: 'https://stem-splitter-api-production.up.railway.app',
});
async function handleFileUpload(file: File) {
try {
// Convert File to Buffer (in browser)
const arrayBuffer = await file.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
// Separate audio
const result = await client.separateFromBuffer(buffer, file.name, { stems: 2 });
// Download result
const blob = new Blob([result.data], { type: 'application/zip' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = result.filename;
a.click();
URL.revokeObjectURL(url);
} catch (error) {
console.error('Error:', error.message);
}
}
`
`typescript`
try {
const result = await client.separate('./audio.mp3', { stems: 2 });
// Handle success
} catch (error) {
if (error.message.includes('File too large')) {
console.error('File exceeds maximum size limit');
} else if (error.message.includes('Invalid file type')) {
console.error('File type not supported');
} else if (error.message.includes('timeout')) {
console.error('Request timed out - file may be too large or processing too slow');
} else {
console.error('Unexpected error:', error.message);
}
}
- MP3
- WAV
- OGG
- FLAC
- M4A
- 2 stems: Vocals, Accompaniment
- 4 stems: Vocals, Drums, Bass, Other
- 5 stems: Vocals, Drums, Bass, Piano, Other
Full TypeScript definitions are included. The package exports all types:
`typescript`
import {
StemSplitterClient,
StemSplitterOptions,
SeparationOptions,
SeparationResult,
HealthStatus,
ApiInfo,
} from 'stem-splitter-api';
MIT
For API documentation and support, visit the API docs at /docs` endpoint.