🔥 查看我们的新开源项目:Album AI - 使用自然语言与您的相册聊天!

Suno.ai v3是一个令人惊叹的AI音乐服务。尽管官方API尚未发布,但我们迫不及待地想将其功能集成到某处。
我们发现一些用户有类似的需求,所以我们决定开源这个项目,希望你会喜欢。
我们已经部署了一个绑定到免费Suno账户的示例,所以它有每日使用限制,但你可以看到它是如何运行的: suno.gcui.ai
/v1/chat/completions API格式F12或访问开发者工具。网络标签。client?_clerk_js_version的请求。Header标签。Cookie部分,将鼠标悬停在上面,并复制Cookie的值。
你可以选择你喜欢的部署方法:
git clone https://github.com/gcui-art/suno-api.git cd suno-api npm install
或者,你可以使用Docker Compose
docker compose build && docker compose up
如果部署到Vercel,请在Vercel仪表板中添加一个环境变量SUNO_COOKIE,值为第一步中获取的cookie。
如果你在本地运行,请确保在.env文件中添加以下内容:
SUNO_COOKIE=<your-cookie>
https://<vercel分配的域名>/api/get_limit API进行测试。npm run dev。http://localhost:3000/api/get_limit API进行测试。{ "credits_left": 50, "period": "day", "monthly_limit": 50, "monthly_usage": 50 }
表示程序运行正常。
你可以在以下地址查看详细的API文档: suno.gcui.ai/docs
Suno API目前主要实现了以下API:
- `/api/generate`:生成音乐 - `/v1/chat/completions`:生成音乐 - 以与OpenAI API兼容的格式调用generate API - `/api/custom_generate`:生成音乐(自定义模式,支持设置歌词、音乐风格、标题等) - `/api/generate_lyrics`:根据提示生成歌词 - `/api/get`:根据id获取音乐信息。使用","分隔多个id。 如果未提供ID,将返回所有音乐。 - `/api/get_limit`:获取配额信息 - `/api/extend_audio`:延长音频长度 - `/api/clip`:根据作为查询参数`id`传递的ID获取剪辑信息 - `/api/concat`:从扩展生成完整歌曲
更详细的文档,请查看演示站点: suno.gcui.ai/docs
import time import requests # 替换为你的vercel域名 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 extend_audio(payload): url = f"{base_url}/api/extend_audio" 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() def get_clip(clip_id): url = f"{base_url}/api/clip?id={clip_id}" response = requests.get(url) return response.json() def generate_whole_song(clip_id): payload = {"clip_id": clip_id} url = f"{base_url}/api/concat" response = requests.post(url, json=payload) return response.json() if __name__ == '__main__': data = generate_audio_by_prompt({ "prompt": "一首关于战争的流行重金属歌曲,由深沉的男声歌手演唱,缓慢而富有旋律。歌词描绘了战后人们的悲伤。", "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 # 休眠5秒 time.sleep(5)
const axios = require("axios"); // 替换为你的 vercel 域名 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 extendAudio(payload) { const url = `${baseUrl}/api/extend_audio`; 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 getClipInformation(clipId) { const url = `${baseUrl}/api/clip?id=${clipId}`; const response = await axios.get(url); return response.data; } async function main() { const data = await generateAudioByPrompt({ prompt: "一首关于战争的流行重金属歌曲,由一位深沉男声歌手缓慢而富有旋律地演唱。歌词描述了战后人们的悲伤。", 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; } // 等待5秒 await new Promise((resolve) => setTimeout(resolve, 5000)); } } main();
您可以将 Suno AI 作为工具/插件/动作集成到您的 AI 代理中。
[即将推出...]
[即将推出...]
[即将推出...]
有四种方式可以支持这个项目:
我们使用 GitHub Issues 来管理反馈。随时提出问题,我们会及时处理。
LGPL-3.0 或更高版本
suno-api 是一个非官方的开源项目,仅用于学习和研究目的。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东 等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号