Saltar al contenido
Recursos para desarrolladores
Recursos para desarrolladores

SDKs

Instale un SDK de RunAPI con tipos, autentíquelo con una clave de API y elija el ciclo de vida de Task adecuado para su aplicación.

Los SDKs de RunAPI proporcionan clientes tipados para las familias de modelos compatibles en JavaScript, Python, PHP, Java, Ruby y Go. Elija el paquete del lenguaje correspondiente a la familia de modelos que utiliza su aplicación.

Instalar un SDK de modelo

Instale el paquete que coincida con su idioma y familia de modelos. Por ejemplo, instale el SDK de JavaScript de Suno:

SHELL
npm install @runapi.ai/[email protected]

La misma familia de modelos está disponible a través del gestor de paquetes para cada entorno de ejecución compatible:

SHELL
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]

Para Java, agregue el módulo Suno con Gradle o Maven:

KOTLIN
dependencies {
  implementation("ai.runapi:runapi-suno:0.5.0")
}
XML
<dependency>
  <groupId>ai.runapi</groupId>
  <artifactId>runapi-suno</artifactId>
  <version>0.5.0</version>
</dependency>

Autenticar el cliente

Establezca RUNAPI_API_KEY en el entorno antes de crear un cliente. El SDK utiliza una Clave de API de RunAPI para el mismo contexto de cuenta que sus solicitudes REST y el flujo de trabajo de la CLI.

SHELL
export RUNAPI_API_KEY="runapi_..."

Cree y rote claves en la Guía de Autenticación. Guarde las claves en su administrador de secretos en lugar del código fuente de la aplicación.

Trabajar con archivos y cargas

Cada cliente de proveedor expone los recursos files persistentes y uploads multiparte desde su paquete principal. El método files.create existente sigue creando una URL temporal; use files.createFile en JavaScript, Java y PHP, files.create_file en Python y Ruby, o Files.CreateFile en Go para crear un objeto File persistente.

JAVASCRIPT
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);

Usa uploads.create, addPart, complete y cancel cuando una solicitud se divida en Parts. Python y Ruby usan add_part; Go usa AddPart. Consulta Files and Uploads para conocer los límites, los ejemplos REST y el ciclo de vida completo.

Transcribir audio de forma síncrona

El SDK de transcripción de OpenAI sube un archivo de audio local y devuelve la transcripción completada en la misma solicitud. Los formatos de respuesta JSON devuelven un objeto nativo del lenguaje; los formatos de texto, SRT y VTT devuelven la cadena de respuesta exacta.

JAVASCRIPT
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",
});

Consulte la referencia de la API de Transcripción de audio para conocer los formatos de archivo, los campos específicos de cada modelo y los formatos de respuesta.

Trabajar con tareas asíncronas

Muchas operaciones de medios son asíncronas. Use create para enviar una Tarea y recibir su id inmediatamente, get para recuperar su estado actual, o run para enviar y sondear hasta que alcance un estado terminal. En un controlador de solicitudes web, prefiera create más una devolución de llamada o un sondeo posterior con get para que la solicitud no mantenga un trabajador abierto.

JavaScript

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

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
<?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

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

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

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()
);

Reutilizar un Style Persona

Crea un Style Persona a partir de una URL de audio pública y reutiliza el persona.id devuelto con las cuatro operaciones de música compatibles. persona_type: "style" aplica características reutilizables de género y estado de ánimo. No garantiza la clonación de la voz de la grabación original, la preservación sin pérdidas de su estilo ni ninguna similitud particular con el audio fuente.

JAVASCRIPT
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,
});

Elegir el siguiente flujo de trabajo

Usa un SDK cuando tu aplicación se beneficie de constructores de solicitudes tipadas y helpers de Task nativos del lenguaje. Usa la RunAPI CLI para automatización de shell, comprobaciones locales y depuración de devoluciones de llamada. Para conocer los campos exactos de solicitud, las respuestas de Task y los errores, usa la Referencia de la API.

Vidu Q4

Los paquetesViduproporcionan recursos de imagen a video y de referencia a video con asistentes de creación, recuperación y tareas asincrónicas. Utilice vidu-q4-image-to-video o vidu-q4-reference-to-video para el recurso correspondiente. Los nombres de los paquetes son @runapi.ai/vidu paraJavaScript, runapi-vidu paraPythonyRuby, runapi-ai/vidu paraPHP, ai.runapi:runapi-vidu paraJavay github.com/runapi-ai/vidu-sdk/go porGo.

Consulta los requisitos de imágenes de referencia y MP3 en la guía de la API de tareas。 Consulta también Precios de imagen a vídeo · Precios de referencias a vídeo。