SDK
安裝已具型別的 RunAPI SDK,以 API 金鑰進行身分驗證,並為您的應用程式選擇合適的 Task 生命週期。
RunAPI SDK 為支援的模型系列提供具型別的用戶端,支援 JavaScript、Python、PHP、Java、Ruby 及 Go。請依應用程式所呼叫的模型系列選擇對應的語言套件。
安裝模型 SDK
安裝符合您語言與模型系列的套件。例如,安裝 Suno JavaScript SDK:
npm install @runapi.ai/[email protected]
每個支援的執行環境均可透過套件管理員取得相同的模型系列:
pip install runapi-suno==0.6.0
composer require runapi-ai/suno:0.4.0
gem install runapi-suno --version 0.6.0
go get github.com/runapi-ai/suno-sdk/[email protected]
對於 Java,請使用 Gradle 或 Maven 新增 Suno 模組:
dependencies {
implementation("ai.runapi:runapi-suno:0.5.0")
}
<dependency>
<groupId>ai.runapi</groupId>
<artifactId>runapi-suno</artifactId>
<version>0.5.0</version>
</dependency>
對用戶端進行身分驗證
在建立用戶端之前,請先在環境變數中設定 RUNAPI_API_KEY。SDK 使用 RunAPI API 金鑰,與您的 REST 請求和 CLI 工作流程共用相同的帳號情境。
export RUNAPI_API_KEY="runapi_..."
在身分驗證 指南中建立並輪換金鑰。請將金鑰存放於密鑰管理器中, 而非應用程式原始碼內。
使用檔案與上傳功能
每個 Provider Client 從其核心套件公開持久性 files 與分段 uploads
資源。現有的 files.create 方法仍會建立暫時 URL;在 JavaScript、
Java 和 PHP 中請使用 files.createFile,在 Python 和 Ruby 中使用
files.create_file,在 Go 中使用 Files.CreateFile 來建立持久性檔案物件。
const file = await client.files.createFile({
file: new Blob([fileBytes], { type: "application/pdf" }),
filename: "knowledge.pdf",
purpose: "user_data",
});
const bytes = await client.files.content(file.id);
await client.files.deleteFile(file.id);
當請求分割為多個 Parts 時,請使用 uploads.create、addPart、complete 及 cancel。Python 和 Ruby 使用 add_part;Go 使用 AddPart。如需限制、REST 範例及完整生命週期,請參閱 Files and Uploads。
同步轉錄音訊
OpenAI Transcription SDK 上傳本機音訊檔案,並在同一個請求中返回已完成的轉錄結果。JSON 回應格式返回語言原生物件;text、SRT 及 VTT 格式則返回原始回應字串。
import { OpenaiTranscriptionClient } from "@runapi.ai/openai-transcription";
const client = new OpenaiTranscriptionClient();
const transcript = await client.speechToText.run({
file: new Blob([audioBytes], { type: "audio/mpeg" }),
filename: "interview.mp3",
response_format: "json",
});
請參閱音訊轉錄 API 參考,了解檔案格式、模型特定欄位及回應格式。
使用非同步 Task
許多媒體操作均為非同步。使用 create 提交任務並立即取得其 id,使用 get 取得其目前狀態,或使用 run 提交後持續輪詢直到達到終止狀態。在 Web 請求處理器中,建議使用 create 搭配回呼或稍後的 get 輪詢,以避免請求長時間佔用 worker。
JavaScript
import { SunoClient } from "@runapi.ai/suno";
const client = new SunoClient();
const result = await client.textToMusic.run({
model: "suno-v5",
vocal_mode: "auto_lyrics",
prompt: "A short piano theme",
});
console.log(result.audios[0].audio_url);
Python
from runapi.suno import SunoClient
client = SunoClient()
result = client.text_to_music.run(
model="suno-v4.5-plus",
vocal_mode="auto_lyrics",
prompt="A short piano theme",
)
print(result.audios[0].audio_url)
PHP
<?php
use RunApi\Suno\SunoClient;
$client = new SunoClient();
$result = $client->textToMusic->run([
'model' => 'suno-v5.5',
'vocal_mode' => 'auto_lyrics',
'prompt' => 'A short piano theme',
]);
print_r($result->toArray());
Ruby
require "runapi/suno"
client = RunApi::Suno::Client.new
result = client.text_to_music.run(
model: "suno-v4.5-plus",
vocal_mode: "auto_lyrics",
prompt: "A short piano theme"
)
puts result.dig("audios", 0, "audio_url")
Go
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/runapi-ai/core-sdk/go/option"
"github.com/runapi-ai/suno-sdk/go/suno"
)
func main() {
client, err := suno.NewClient(option.WithAPIKey(os.Getenv("RUNAPI_API_KEY")))
if err != nil {
log.Fatal(err)
}
result, err := client.TextToMusic.Run(context.Background(), suno.TextToMusicParams{
SunoBaseParams: suno.SunoBaseParams{Model: suno.ModelV45Plus},
VocalMode: suno.VocalModeAutoLyrics,
Prompt: "A short piano theme",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.ID)
}
Java
import ai.runapi.suno.SunoClient;
import ai.runapi.suno.types.CompletedTextToMusicResponse;
import ai.runapi.suno.types.TextToMusicModel;
import ai.runapi.suno.types.TextToMusicParams;
SunoClient client = SunoClient.builder()
.apiKey(System.getenv("RUNAPI_API_KEY"))
.build();
CompletedTextToMusicResponse result = client.textToMusic().run(
TextToMusicParams.builder()
.model(TextToMusicModel.SUNO_V5)
.vocalMode("auto_lyrics")
.prompt("A short piano theme")
.build()
);
重複使用 Style Persona
從公開音訊 URL 建立 Style Persona,然後將回傳的
persona.id 搭配四種支援的音樂操作重複使用。persona_type:
"style" 可套用可重複使用的曲風與情緒特性,但不保證複製來源錄音的音色、無損保留其風格,或與來源音訊有任何特定相似度。
import { SunoClient } from "@runapi.ai/suno";
const client = new SunoClient();
const referenceAudioUrl = "https://cdn.runapi.ai/public/samples/music.mp3";
const sampled = await client.addSamples.run({
model: "suno-v5",
audio_url: referenceAudioUrl,
start_seconds: 0,
end_seconds: 30,
});
const sourceAudioId = sampled.audios?.[0]?.id;
if (!sourceAudioId) throw new Error("The sample Task did not return an audio ID");
const { persona } = await client.generatePersona.run({
task_id: sampled.id,
audio_id: sourceAudioId,
name: "Studio Style",
description: "A warm and expressive acoustic pop style.",
});
const textToMusic = await client.textToMusic.run({
model: "suno-v5",
vocal_mode: "auto_lyrics",
prompt: "An uplifting acoustic pop song about a rainy city night",
persona_id: persona.id,
persona_type: "style",
});
const coverAudio = await client.coverAudio.run({
model: "suno-v5",
upload_url: referenceAudioUrl,
vocal_mode: "auto_lyrics",
prompt: "Rework the reference track as acoustic pop",
persona_id: persona.id,
persona_type: "style",
});
const createMashup = await client.createMashup.run({
model: "suno-v5",
upload_url_list: [
referenceAudioUrl,
"https://cdn.runapi.ai/public/samples/audio-2.mp3",
],
vocal_mode: "auto_lyrics",
prompt: "Blend both tracks into an energetic acoustic pop mashup",
persona_id: persona.id,
persona_type: "style",
});
const extendMusic = await client.extendMusic.run({
model: "suno-v5",
upload_url: referenceAudioUrl,
parameter_mode: "custom",
instrumental: false,
prompt: "Continue the arrangement with a brighter chorus",
style: "Acoustic pop with warm piano",
title: "Brighter Chorus",
continue_at: 60,
persona_id: persona.id,
persona_type: "style",
});
console.log({
textToMusic: textToMusic.audios[0]?.audio_url,
coverAudio: coverAudio.audios[0]?.audio_url,
createMashup: createMashup.audios[0]?.audio_url,
extendMusic: extendMusic.audios[0]?.audio_url,
});
選擇下一個工作流程
當您的應用程式需要型別化請求建構器和語言原生 Task 輔助工具時,請使用 SDK。針對 shell 自動化、本機檢查及回呼除錯,請使用 RunAPI CLI。若需確切的請求欄位、Task 回應及錯誤資訊,請使用 API 參考。
Vidu Q4
Vidu 軟體包提供圖像到視頻和參考到視頻
具有建立、檢索和非同步任務助理的資源。使用 vidu-q4-image-to-video 或 vidu-q4-reference-to-video 為
相應的資源。軟體包名稱為 @runapi.ai/vidu JavaScript、 runapi-vidu 適用於 Python 和 Ruby、 runapi-ai/vidu 適用於 PHP, ai.runapi:runapi-vidu 適用於 Java 和 github.com/runapi-ai/vidu-sdk/go 適用於 Go。