187 lines
7.2 KiB
Markdown
187 lines
7.2 KiB
Markdown
---
|
||
name: suno
|
||
description: Используй когда пользователь просит создать музыку, текст песни, кавер, ремикс, мэшап, видео, или работать с Suno AI Music API. Покрывает генерацию музыки, тексты, разделение вокала/стемов, Persona, стили и конвертацию.
|
||
---
|
||
|
||
# Suno Music API Skill
|
||
|
||
Этот skill описывает MCP-сервер для работы с [Suno API](https://sunoapi.org) через opencode.
|
||
|
||
## Лимиты и цены
|
||
|
||
- **Rate limit**: 20 запросов на 10 секунд.
|
||
- **Стоимость кредита**: $0.005 USD.
|
||
- **Кредиты не истекают**.
|
||
- Сгенерированные файлы хранятся **15 дней**.
|
||
|
||
## Прокси
|
||
|
||
Если сервис недоступен из вашей сети, MCP сервер поддерживает прокси через переменные окружения (в порядке приоритета):
|
||
|
||
```
|
||
SUNO_HTTP_PROXY=http://user:pass@proxy:8080
|
||
HTTPS_PROXY=http://proxy:8080
|
||
HTTP_PROXY=http://proxy:8080
|
||
```
|
||
|
||
## Основные сценарии
|
||
|
||
### 1. Сгенерировать песню с нуля
|
||
|
||
```
|
||
suno_generate_music
|
||
prompt: "Мелодичный инди-фолк с акустической гитарой, мягким вокалом, ностальгическое настроение"
|
||
customMode: false
|
||
instrumental: false
|
||
model: "V4_5ALL"
|
||
```
|
||
|
||
Вернёт `taskId`. Затем нужно подождать и вызвать:
|
||
|
||
```
|
||
suno_get_task_status
|
||
taskId: "..."
|
||
```
|
||
|
||
Результат: 2 трека с `audio_url`, `title`, `tags`, `duration`, `prompt`.
|
||
|
||
### 2. Сгенерировать песню в кастомном режиме
|
||
|
||
```
|
||
suno_generate_music
|
||
prompt: "[Verse] Ночной город, огни витрин..."
|
||
customMode: true
|
||
instrumental: false
|
||
style: "Synthwave, cinematic, 80s"
|
||
title: "Neon Rain"
|
||
model: "V4_5"
|
||
```
|
||
|
||
В `customMode: true` поля `style` и `title` обязательны. Если `instrumental: false` — ещё и `prompt` (он станет точным текстом песни).
|
||
|
||
### 3. Получить текст песни
|
||
|
||
```
|
||
suno_generate_lyrics
|
||
prompt: "Песня о путешествии, вдохновляющая, indie pop"
|
||
```
|
||
|
||
Полученный текст можно передать в `suno_generate_music(prompt=текст, customMode=true)`.
|
||
|
||
### 4. Разделить вокал и музыку
|
||
|
||
```
|
||
suno_separate_vocals
|
||
taskId: "<taskId генерации>"
|
||
audioId: "<id трека>"
|
||
```
|
||
|
||
Для продвинутого разделения по инструментам:
|
||
|
||
```
|
||
suno_separate_stems
|
||
taskId: "<taskId>"
|
||
audioId: "<id трека>"
|
||
```
|
||
|
||
### 5. Сделать кавер существующего аудио
|
||
|
||
```
|
||
suno_upload_and_cover
|
||
uploadUrl: "https://example.com/my-song.mp3"
|
||
customMode: true
|
||
instrumental: false
|
||
style: "Jazz"
|
||
title: "Jazz Version"
|
||
prompt: "[Verse] Smooth jazz arrangement..."
|
||
model: "V4_5ALL"
|
||
```
|
||
|
||
### 6. Создать персону из трека
|
||
|
||
```
|
||
suno_generate_persona
|
||
taskId: "<taskId>"
|
||
audioId: "<id трека>"
|
||
```
|
||
|
||
Бесплатно. Возвращает `personaId`, который потом можно использовать в `suno_generate_music` (`personaId` + `personaModel: style_persona`) для единого стиля.
|
||
|
||
### 7. Узнать промпт по готовому треку
|
||
|
||
```
|
||
suno_get_task_status
|
||
taskId: "<taskId генерации>"
|
||
```
|
||
|
||
В ответе будут поля `prompt`, `title`, `tags` для каждого трека.
|
||
|
||
## Полный список инструментов
|
||
|
||
| Инструмент | Назначение | Кредиты |
|
||
|---|---|:---:|
|
||
| `suno_generate_music` | Генерация музыки | 12 |
|
||
| `suno_generate_lyrics` | Генерация текста | 0.4 |
|
||
| `suno_generate_sounds` | Звуки/амбиенты/лупы | 2.5 |
|
||
| `suno_extend_music` | Продлить трек | 12 |
|
||
| `suno_replace_section` | Заменить фрагмент трека | 5 |
|
||
| `suno_add_vocals` | Добавить вокал на инструментал | 12 |
|
||
| `suno_add_instrumental` | Добавить инструментал к вокалу | 12 |
|
||
| `suno_upload_and_cover` | Загрузить аудио и сделать кавер | 12 |
|
||
| `suno_upload_and_extend` | Загрузить аудио и продлить | 12 |
|
||
| `suno_generate_mashup` | Мэшап из двух аудио | 12 |
|
||
| `suno_separate_vocals` | Вокал + минус | 10 |
|
||
| `suno_separate_stems` | Разделение по инструментам | 20 |
|
||
| `suno_create_video` | Видео из трека | 2 |
|
||
| `suno_create_cover` | Обложка трека | 0 |
|
||
| `suno_convert_to_wav` | Конвертация в WAV | 0.4 |
|
||
| `suno_boost_style` | Улучшить описание стиля | 0.4 |
|
||
| `suno_generate_persona` | Создать персону из трека | 0 |
|
||
| `suno_get_task_status` | Статус и метаданные трека | 0 |
|
||
| `suno_get_timestamped_lyrics` | Текст с таймкодами | 0.5 |
|
||
| `suno_get_lyrics_details` | Детали генерации текста | 0 |
|
||
| `suno_get_wav_details` | Детали конвертации WAV | 0 |
|
||
| `suno_get_vocal_separation_details` | Детали разделения | 0 |
|
||
| `suno_get_video_details` | Детали видео | 0 |
|
||
| `suno_get_credits` | Остаток кредитов | 0 |
|
||
|
||
## Выбор модели
|
||
|
||
| Модель | Длина | Когда использовать |
|
||
|---|---|---|
|
||
| `V4` | до 4 мин | Лучшее качество звука |
|
||
| `V4_5` | до 8 мин | Умные промпты, быстрее |
|
||
| `V4_5PLUS` | до 8 мин | Более насыщенный звук |
|
||
| `V4_5ALL` | до 8 мин | Лучшая структура песни |
|
||
| `V5` | до 8 мин | Высокая музыкальность, скорость |
|
||
| `V5_5` | до 8 мин | Персонализированные голоса |
|
||
|
||
## Лимиты символов в `customMode`
|
||
|
||
| Поле | V4 | V4_5 / V4_5PLUS / V4_5ALL / V5 / V5_5 |
|
||
|---|---|---|
|
||
| `prompt` | 3000 | 5000 |
|
||
| `style` | 200 | 1000 |
|
||
| `title` | 80 | 100 |
|
||
|
||
В `customMode: false` только `prompt`, максимум 500 символов.
|
||
|
||
## Рекомендации по промптам
|
||
|
||
- Опиши жанр, настроение, инструменты, темп, энергию.
|
||
- Для вокальных треков в `customMode` пиши текст в формате `[Verse] ... [Chorus] ...`.
|
||
- Избегай противоречивых описаний.
|
||
- Для повторяемого стиля используй `suno_generate_persona`.
|
||
|
||
## Обработка ошибок
|
||
|
||
| Код | Причина |
|
||
|---|---|
|
||
| 400 | Неверные параметры |
|
||
| 401 | Неверный API ключ |
|
||
| 429 | Недостаточно кредитов |
|
||
| 430 | Слишком частые запросы |
|
||
| 455 | Технические работы |
|
||
|
||
Если async-задача не завершилась за 15 минут, сервер вернёт таймаут — используй `suno_get_task_status` позже.
|