60db
v1.0.9
Published
Official 60db SDK for Node.js
Readme
60db
Official 60db SDK for JavaScript/TypeScript
Installation
npm install 60dbQuick Start
import { SixtyDBClient } from '60db';
const client = new SixtyDBClient('your-api-key');Features
🎤 Text-to-Speech
Basic TTS (returns ArrayBuffer):
const audio = await client.textToSpeech({
text: 'Hello, world!',
voice_id: 'your-voice-id',
speed: 1.0, // 0.5 to 2.0 (default 1.0)
pitch: 0, // -10 to 10 (default 0)
stability: 1, // 0 to 1 (default 1)
boost_volume: false,
sample_rate: 24000
});Streaming TTS (real-time chunks):
await client.textToSpeechStream(
{
text: 'This is a streaming example.',
voice_id: 'your-voice-id',
sample_rate: 24000
},
{
onChunk: (chunkIndex, totalBytes) => {
console.log(`Progress: ${chunkIndex} chunks, ${totalBytes} bytes`);
},
onRawChunk: (pcmBytes, sampleRate) => {
console.log(`Received: ${pcmBytes.length} bytes at ${sampleRate}Hz`);
},
onComplete: (wavUrl, sampleRate, totalPcmBytes) => {
console.log(`Complete! WAV: ${wavUrl}`);
console.log(`Duration: ${totalPcmBytes / (sampleRate * 2)} seconds`);
},
onError: (error) => {
console.error('Error:', error);
}
}
);🤖 Chat Completions (LLM)
Non-streaming (simple):
const response = await client.chat.completions.create({
model: 'qcall/slm-3b-int4',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'What is 60db?' }
],
stream: false
});
console.log(response.choices[0].message.content);Streaming (real-time):
const stream = await client.chat.completions.create({
model: 'qcall/slm-3b-int4',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Tell me a joke' }
],
stream: true
});
for await (const chunk of stream) {
if (chunk.choices?.[0]?.delta?.content) {
process.stdout.write(chunk.choices[0].delta.content);
}
}Custom parameters:
const response = await client.chat.completions.create({
model: 'qcall/slm-3b-int4',
messages: [
{ role: 'user', content: 'Explain AI briefly' }
],
top_k: 50, // Default: 100
chat_template_kwargs: {
enable_thinking: true // Enable thinking mode
},
stream: false
});🎧 Voices
// List all voices
const voices = await client.getVoices();
console.log('Total voices:', voices.data.cloned_voices.length);
// Get specific voice
const voice = await client.getVoice(voiceId);🌍 Languages
const languages = await client.getLanguages();
// Returns: [{ language_id: 'en', name: 'English' }, ...]🎤 Speech-to-Text
const result = await client.speechToText(audioFile, {
language: 'en'
});Configuration
const client = new SixtyDBClient({
apiKey: 'your-api-key',
baseUrl: 'https://api.60db.ai' // Optional, default shown
});API Reference
| Method | Description |
|--------|-------------|
| textToSpeech(params) | Convert text to speech (returns ArrayBuffer) |
| textToSpeechStream(params, callbacks) | Stream text to speech with callbacks |
| chat.completions.create(params) | Chat completions (LLM) with streaming support |
| getVoices() | List all available voices |
| getVoice(id) | Get specific voice details |
| getLanguages() | Get supported languages |
| speechToText(audio, options) | Transcribe audio to text |
License
MIT
