suno-api

简介: suno-api


从远处看,每个人都显得格外善良。——李璐璐

这个项目

https://github.com/gcui-art/suno-api/

可以用 API 调用 suno.ai 的音乐生成 AI,并且可以轻松集成到 GPTs 等 agent 中

文档:

https://suno.gcui.art/

本地运行

git clone https://github.com/gcui-art/suno-api.git
cd suno-apinpm install

或者,你也可以使用 Docker Compose

docker compose build && docker compose up

3. 配置 suno-api

  • 如果部署到了 Vercel,请在 Vercel 后台,添加环境变量 SUNO_COOKIE,值为第一步获取的 cookie。
  • 如果在本地运行,请在 .env 文件中添加:
SUNO_COOKIE=<your-cookie>

4. 运行 suno api

  • 如果部署到了 Vercel:
  • 请在 Vercel 后台,点击 Deploy,等待部署成功。
  • 访问 https://<vercel分配的域名>/api/get_limit API 进行测试
  • 如果在本地运行:
  • 请运行 npm run dev
  • 访问 http://localhost:3000/api/get_limit API 进行测试
  • 如果返回以下结果:
{  "credits_left": 0,  "period": "string",  "monthly_limit": 0,  "monthly_usage": 0
}

则已经正常运行。

5. 使用 Suno API

你可以在 suno.gcui.art查看详细的 API 文档,并在线测试。

API 说明

Suno API 目前主要实现了以下 API:

- `/api/generate`: 创建音乐- `/v1/chat/completions`: 创建音乐 - 用OpenAI API 兼容的格式调用 generate API- `/api/custom_generate`: 创建音乐(自定义模式,支持设置歌词、音乐风格、设置标题等)- `/api/generate_lyrics`: 根据Prompt创建歌词- `/api/get`: 根据id获取音乐信息。获取多个请用","分隔,不传ids则返回所有音乐- `/api/get_limit`: 获取配额信息

详细文档请查看演示站点: suno.gcui.art/docs

API 集成代码示例

Python

import time
import requests

# replace your vercel domain
base_url = 'http://localhost:3000'


def custom_generate_audio(payload):    url = f"{base_url}/api/custom_generate"
    response = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})    return response.json()


def generate_audio_by_prompt(payload):    url = f"{base_url}/api/generate"
    response = requests.post(url, json=payload, headers={'Content-Type': 'application/json'})    return response.json()


def get_audio_information(audio_ids):    url = f"{base_url}/api/get?ids={audio_ids}"
    response = requests.get(url)    return response.json()


def get_quota_information():    url = f"{base_url}/api/get_limit"
    response = requests.get(url)    return response.json()


if __name__ == '__main__':    data = generate_audio_by_prompt({        "prompt": "A popular heavy metal song about war, sung by a deep-voiced male singer, slowly and melodiously. The lyrics depict the sorrow of people after the war.",        "make_instrumental": False,        "wait_audio": False
    })    ids = f"{data[0]['id']},{data[1]['id']}"
    print(f"ids: {ids}")    for _ in range(60):        data = get_audio_information(ids)        if data[0]["status"] == 'streaming':            print(f"{data[0]['id']} ==> {data[0]['audio_url']}")            print(f"{data[1]['id']} ==> {data[1]['audio_url']}")            break
        # sleep 5s
        time.sleep(5)

Js

const axios = require("axios");
// replace your vercel domain
const baseUrl = "http://localhost:3000";
async function customGenerateAudio(payload) {
  const url = `${baseUrl}/api/custom_generate`;
  const response = await axios.post(url, payload, {
    headers: { "Content-Type": "application/json" },
  });
  return response.data;
}
async function generateAudioByPrompt(payload) {
  const url = `${baseUrl}/api/generate`;
  const response = await axios.post(url, payload, {
    headers: { "Content-Type": "application/json" },
  });
  return response.data;
}
async function getAudioInformation(audioIds) {
  const url = `${baseUrl}/api/get?ids=${audioIds}`;
  const response = await axios.get(url);
  return response.data;
}
async function getQuotaInformation() {
  const url = `${baseUrl}/api/get_limit`;
  const response = await axios.get(url);
  return response.data;
}
async function main() {
  const data = await generateAudioByPrompt({
    prompt:      "A popular heavy metal song about war, sung by a deep-voiced male singer, slowly and melodiously. The lyrics depict the sorrow of people after the war.",
    make_instrumental: false,
    wait_audio: false,
  });
  const ids = `${data[0].id},${data[1].id}`;
  console.log(`ids: ${ids}`);
  for (let i = 0; i < 60; i++) {
    const data = await getAudioInformation(ids);
    if (data[0].status === "streaming") {
      console.log(`${data[0].id} ==> ${data[0].audio_url}`);
      console.log(`${data[1].id} ==> ${data[1].audio_url}`);
      break;
    }
    // sleep 5s
    await new Promise((resolve) => setTimeout(resolve, 5000));
  }
}
main();
相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
AI音乐生成创企发新模型 几秒生成两分钟歌曲
Suno公司推出AI音乐生成模型,基于深度学习和大数据,快速创作符合用户喜好的歌曲,简化音乐创作流程,让业余爱好者也能参与。该模型高度可定制,支持二次创作,引发行业关注。创始人强调,目标是辅助而非取代人类音乐家,旨在促进音乐产业创新与发展。
169 1
AI音乐生成创企发新模型 几秒生成两分钟歌曲
|
1月前
|
供应链 数据挖掘 API
解密1688详情 API 接口:获取与运用指南
1688商品详情API接口为企业提供了高效获取商品信息的途径,支持市场分析、供应链管理和个性化服务。通过注册开发者账号、了解接口规范、申请权限、构建请求、发送HTTP请求、解析响应数据等步骤,企业可以成功接入并运用API接口。然而,在使用过程中可能会遇到权限、频率限制、数据格式和性能等问题,需要采取相应的解决方案。随着1688平台的不断发展和技术的不断进步,相信未来商品详情的API接口会提供更多的功能和更优质的服务,为电商行业的创新和发展带来更多的可能性。
60 0
|
6月前
|
安全 Java Unix
如何开展API安全实现
【4月更文挑战第29天】安全编码培训、安全编码、静态检测。
|
SQL 人工智能 分布式计算
基于阿里云PAI平台搭建知识库检索增强的大模型对话系统
基于原始的阿里云计算平台产技文档,搭建一套基于大模型检索增强答疑机器人。本方案已在阿里云线上多个场景落地,将覆盖阿里云官方答疑群聊、研发答疑机器人、钉钉技术服务助手等。线上工单拦截率提升10+%,答疑采纳率70+%,显著提升答疑效率。
|
XML API 数据库
API介绍
API介绍
116 1
|
安全 API
常用API
常用API接口分享
87 0
|
关系型数据库 OLAP API
API 授权|学习笔记
快速学习 API 授权
172 0
API 授权|学习笔记
|
6月前
|
人工智能 运维 监控
智研未来,直击 AI DevOps,阿里云用户交流日杭州站来啦!
在这个技术日新月异的时代,云上智能化DevOps正以前所未有的速度推动企业创新边界,重塑软件开发的效率与品质。 为深入探索这一变革之路,我们诚邀您参与我们的专属闭门技术沙龙,携手开启一场关于云上智能化DevOps的挑战、实践与未来的展望之旅。
7491 0
智研未来,直击 AI DevOps,阿里云用户交流日杭州站来啦!
|
6月前
|
域名解析 应用服务中间件 对象存储
解决阿里云oss图片浏览器访问直接下载而不是打开
解决阿里云oss图片浏览器访问直接下载而不是打开
3431 0
|
XML JSON API
API参考—实例管理—ModifyDBInstanceDescription
调用ModifyDBInstanceDescription接口修改实例描述。