Compare commits

..
4 Commits
Author SHA1 Message Date
neo 50ab31d4e2 Add Russian songwriting & lyrics guide for ACE-Step 2026-08-30 17:07:35 +05:00
neo 8ae891ff5e Add ACE-Step 1.5 XL research for RTX A2000 12GB 2026-08-30 17:03:02 +05:00
neo e7682e9e0b Merge remote-tracking branch 'origin/main'
# Conflicts:
#	README.md
2026-08-30 16:58:41 +05:00
neo 72a33beaca Initial ACE-Step Studio: captions, lyrics, logs 2026-08-30 16:58:07 +05:00
9 changed files with 758 additions and 3 deletions

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
# ACE-Step output — не коммитить
*.wav
output/
__pycache__/
*.pyc
.venv/
venv/
.env
-3
View File
@@ -1,3 +0,0 @@
# acestep-studio
ACE-Step 1.5 studio: база caption-шаблонов, лириков и логов генераций
+5
View File
@@ -0,0 +1,5 @@
{
"_note": "Логи генераций. Заполнять после каждого трека: genre, caption_ref, seed, bpm, quality_10, notes. Повторять удачные комбинации.",
"version": "1.0",
"entries": []
}
+35
View File
@@ -0,0 +1,35 @@
{
"_note": "Архив лириков по структурам. ACE-Step читает [Verse]/[Chorus]/[Bridge]/[Intro]/[Outro]. Русский язык.",
"version": "1.0",
"structures": [
{
"genre": "anthem",
"layout": "[Intro] -> [Verse] -> [Chorus] -> [Verse] -> [Chorus] -> [Bridge] -> [Chorus] -> [Outro]",
"example": "personal_xl_gpu",
"notes": "Классическая структура для вдохновляющего трека. Припев повторяется 3 раза."
},
{
"genre": "ballad",
"layout": "[Intro] -> [Verse] -> [Verse] -> [Chorus] -> [Verse] -> [Chorus] -> [Outro]",
"example": "ru_test",
"notes": "Медленная баллада, меньше повторов, акцент на куплеты."
},
{
"genre": "high_energy",
"layout": "[Intro] -> [Verse] -> [Pre-Chorus] -> [Chorus] -> [Verse] -> [Pre-Chorus] -> [Chorus] -> [Bridge] -> [Chorus] -> [Outro]",
"example": "personal_new",
"notes": "С прехорусом, нарастание перед припевом. Для pop-rock/rock."
},
{
"genre": "instrumental",
"layout": "[Intro] -> [Verse] -> [Chorus] -> [Bridge] -> [Outro]",
"notes": "lyrics='' (пустая строка, не None) + caption с 'pure instrumental'."
}
],
"tips": [
"ACE-Step чувствителен к структуре — [Chorus] должен повторяться для узнаваемости",
"Куплеты 4-8 строк, припев 2-4 строки",
"Не перегружай текст — модель генерирует вокал по всему тексту сразу",
"Для instrumental оставляй lyrics=\"\" (пустая строка)"
]
}
+172
View File
@@ -0,0 +1,172 @@
{
"_note": "ACE-Step 1.5 XL — caption-шаблоны по жанрам. Caption на английском, vocal_language ru. Бери за основу, меняй BPM/key/theme.",
"version": "1.0",
"generated_from": "~/ace-step-1.5/gen_*.py",
"templates": [
{
"genre": "rock_anthem",
"bpm": 120,
"key": "D major",
"caption": "An inspirational, uplifting rock anthem with a powerful male vocal. Soaring electric guitar leads, guitar-driven melodic riffs, driving drums, emotional and determined mood. Anthemic chorus, building energy, inspiring and hopeful, about overcoming hardship and chasing a dream.",
"vocal": "male",
"rating": 4.5,
"notes": "Универсальный вдохновляющий трек. Хорош для личного контента."
},
{
"genre": "cinematic_poprock",
"bpm": 128,
"key": "F major",
"caption": "An uplifting, cinematic pop-rock anthem with a powerful male vocal. Building drums, bright synth pads, soaring electric guitar, emotional and hopeful mood. Anthem-like chorus, sense of a new dawn and forward motion, determined and inspiring.",
"vocal": "male",
"rating": 4.7,
"notes": "Более кинематографичный, светлый. Лучший из пресетов по качеству вокала."
},
{
"genre": "anime_jrock",
"bpm": 175,
"key": "E minor",
"caption": "A blazing, energetic anime opening theme in J-rock style with a fast driving rhythm, overdriven electric guitar riffs, bright synth stabs, pounding drums, and an epic motivational female vocal hook. Triumphant and uplifting, hero's journey energy, about starting a new chapter and chasing a dream.",
"vocal": "female",
"rating": 4.2,
"notes": "Быстро, энергично. Женский вокал."
},
{
"genre": "kpop_blackpink",
"bpm": 170,
"key": "E minor",
"caption": "A high-energy BLACKPINK-style K-pop anthem at 170 BPM with a duet of bright female lead vocal and gritty male rap vocal. Catchy hooks, massive deep pounding bass with heavy sub-bass, heavily overdriven electric guitar riffs, crushing aggressive drums. Hard-hitting, uplifting, defiant and inspiring, about overcoming debt and hardship.",
"vocal": "duet_f_m",
"rating": 4.0,
"notes": "Дуэт вокал+рэп. Мощный бас."
},
{
"genre": "industrial_metal",
"bpm": 130,
"key": "D minor",
"caption": "A brutal industrial metal track in the style of Mick Gordon's DOOM soundtrack. Drop-tuned heavy guitar riffs, massive industrial percussion hits, dark electronic textures, aggressive screamed male vocal, epic and relentless. About rage, defiance and rising from the ashes.",
"vocal": "male_scream",
"rating": 3.8,
"notes": "Тёмный, агрессивный. Скрим."
},
{
"genre": "drift_phonk",
"bpm": 150,
"key": "E minor",
"caption": "A dark atmospheric drift phonk track with heavy distorted bass, punchy cowbell melody, and prominent electric guitar riffs driving the song. Night-driving JDM vibe, aggressive yet determined mood. Inspirational gritty male vocal, powerful and raw, about overcoming hardship and chasing a dream.",
"vocal": "male",
"rating": 4.1,
"notes": "Ковбелл, тёмный бас. Nocturnal vibe."
},
{
"genre": "aggressive_rock",
"bpm": 170,
"key": "E minor",
"caption": "A high-energy, heavy, aggressive rock anthem at 170 BPM with pounding distorted bass, heavily overdriven electric guitar riffs, and powerful driving drums. Anthemic and uplifting, defiant and inspiring, about overcoming debt and hardship. Powerful gritty male vocal, raw and determined.",
"vocal": "male",
"rating": 4.0,
"notes": "Мост между rock_anthem и industrial."
},
{
"genre": "dance_pop",
"bpm": 132,
"key": "D major",
"caption": "A high-energy, driving dance-pop track with a powerful, confident female vocal. Punchy four-on-the-floor kick drum, driving bassline, bright energetic synth leads and risers, rhythmic electric guitar accents. Upbeat, euphoric and adrenaline-filled mood, club-ready. The female vocal is strong, clear and energetic, soaring through the chorus with power and attitude.",
"vocal": "female",
"rating": 4.3,
"notes": "Клаб, 4/4. Чистый женский вокал."
},
{
"genre": "kpop_power",
"bpm": 130,
"key": "F minor",
"caption": "A confident, aggressive BLACKPINK-style K-pop power anthem with a powerful female vocal, military march vibe, heavy 808 trap beat, punchy bass, sharp synth stabs, chant-like hooks. 'I'm on a mission, I'm in control' attitude, defiant and commanding, about overcoming hardship and never giving up.",
"vocal": "female",
"rating": 4.0,
"notes": "808-бас, марш."
},
{
"genre": "edm_trap",
"bpm": 160,
"key": "F minor",
"caption": "A high-energy K/DA 'MORE' style aggressive EDM trap anthem at 160 BPM with massive crushing 808 bass, deep rumbling sub-bass, distorted low-end, powerful confident female vocal with rapid rap sections, bright synthetic leads, huge anthemic EDM drop. Defiant, confident and anthemic, about wanting more and never giving up.",
"vocal": "female_rap",
"rating": 3.9,
"notes": "808+рэп+дроп. K/DA стиль."
},
{
"genre": "kpop_party",
"bpm": 132,
"key": "D major",
"caption": "A bright, energetic, uplifting BLACKPINK-style K-pop track with a duet of a sparkling female lead vocal and a confident bold female rap vocal in the style of BLACKPINK's Lisa. Overdriven electric guitar riffs with heavy distortion, punchy bass, driving drums, catchy party hooks, danceable groove, funky dance-floor rhythm, celebratory and empowering mood.",
"vocal": "duet_f_f",
"rating": 4.1,
"notes": "Два женских вокала, вечеринка."
},
{
"genre": "chiptune",
"bpm": 170,
"key": "C major",
"caption": "A joyful retro video game anthem in the style of classic Mario and Sega games, 16-bit chiptune. Sonic-style ring sounds, Mario coin sparkles, power-up ascending arpeggios, bright square wave leads, springy bouncy bass, fast energetic tempo, cheerful female vocal singing a quantum-themed anthem. Nostalgic, triumphant and fun.",
"vocal": "female",
"rating": 4.2,
"notes": "8/16-bit. Ностальгия."
},
{
"genre": "chiptune_instru",
"bpm": 145,
"key": "C major",
"caption": "A joyful retro video game soundtrack in the style of classic Mario and Sega games. 8-bit and 16-bit chiptune synths, bright catchy melody with ascending arpeggios, coin-like sparkles, springy bouncy bass, energetic playful rhythm, pixel-perfect nostalgic vibe. Upbeat, fun and triumphant, pure instrumental.",
"vocal": "instrumental",
"rating": 4.4,
"notes": "Pure instrumental. Хорош как фон."
},
{
"genre": "metal_blackalbum",
"bpm": 108,
"key": "E minor",
"caption": "A heavy metal track in the style of Metallica's 1991 Black Album. Starts with a clean melancholic guitar intro that explodes into a heavy distorted riff. Groove-heavy mid-tempo, palm-muted power riffs, galloping drums, melodic guitar solo, powerful clean-yet-aggressive male vocal. Dark, epic and defiant, about perseverance and forging your own path.",
"vocal": "male",
"rating": 4.0,
"notes": "Mid-tempo, соло. Metallica 91'."
},
{
"genre": "synthwave",
"bpm": 105,
"key": "A minor",
"caption": "A nostalgic synthwave track with warm analog synthesizers, pulsing bassline, retro 80s drums, and atmospheric pads. Melancholic yet hopeful mood, about driving forward through the night toward a new dawn. Clear emotional male vocal, determined and warm.",
"vocal": "male",
"rating": 4.5,
"notes": "Тёплый аналог, 80-е. Отличный вокал."
},
{
"genre": "nu_metal",
"bpm": 105,
"key": "E minor",
"caption": "A heavy nu-metal / rap-rock track in the style of early 2000s Limp Bizkit, Korn and System of a Down. Guitar-heavy: layered downtuned distorted guitar riffs, dual guitar harmonies, heavy groovy rhythm, aggressive male vocal mixing rap verses with screamed choruses. Dark, defiant and cathartic, about refusing to break under pressure.",
"vocal": "male_rap_scream",
"rating": 3.7,
"notes": "Рэп+скрим. Nu-metal 2000-х."
},
{
"genre": "russian_ballad",
"bpm": 90,
"key": "A minor",
"caption": "A tender, melancholic Russian pop ballad about winter and walking alone through snow-covered city streets at night. Soft emotional male vocal, gentle piano and warm strings, slow tempo, heartfelt and intimate mood.",
"vocal": "male",
"rating": 4.3,
"notes": "Русский вокал, баллада. Пиано+струнные."
}
],
"tuning_rules": {
"caption_language": "English (модель лучше ловит стиль по английскому caption)",
"lyrics_language": "Russian",
"guidance_scale": 1.0,
"inference_steps": 8,
"thinking": false,
"device": "cuda",
"offload_to_cpu": true,
"bpm_range": "30-300 (None = auto)",
"duration_default": 120,
"vocal_languages": "ru есть в acestep/constants.py:VALID_LANGUAGES"
}
}
+100
View File
@@ -0,0 +1,100 @@
# ACE-Step 1.5 XL — исследование для RTX A2000 12GB
**Дата:** 2026-08-30
**Цель:** определить, что нужно изучить для вывода генерации на более высокий уровень
**Модель:** `acestep-v15-xl-turbo` (4B DiT) на RTX A2000 12GB
---
## Ключевой вывод
**RTX A2000 12GB = Tier 4 по классификации ACE-Step.** XL DiT официально НЕ поддерживается на этом tier — работает только через aggressive CPU offload + INT8 quantization, и только с LM-моделью **0.6B** (не 1.7B). Это накладывает жёсткие ограничения на «высокий уровень»: LoRA нельзя грузить на INT8-модель, а качество вокала на turbo-режиме всегда будет «грубее», чем на base.
---
## Обзор (синтез источников)
ACE-Step 1.5 использует гибридную LM+DiT архитектуру: 5Hz Language Model строит Chain-of-Thought (планирует BPM/тональность/структуру), DiT генерирует звук [1][2]. Разделение на `caption` (звучание) и `lyrics` (структура песни) — ключевое отличие от Suno [3].
Система автоматически определяет tier GPU по VRAM и подбирает настройки [2]:
| VRAM | Tier | XL DiT | LM модель | Backend |
|---|---|---|---|---|
| ≤4GB | 1 | ❌ | None | pt |
| 4–6GB | 2 | ❌ | None | pt |
| 6–8GB | 3 | ⚠️ 0.6B | 0.6B | pt |
| **8–12GB** | **4** | **⚠️ 0.6B** | **0.6B** | **vllm** |
| 12–16GB | 5 | ⚠️ 0.6B, 1.7B | 1.7B | vllm |
| 16–20GB | 6a | ✅ offload | 1.7B | vllm |
| 20–24GB | 6b | ✅ | 1.7B | vllm |
| ≥24GB | Unlimited | ✅ все | 4B | vllm |
XL (4B) DiT весит ~9GB (vs ~4.7GB для 2B) [2]. На A2000 XL влезает только с offload + INT8, поэтому в текущей конфигурации `offload_to_cpu=True` — правильный выбор.
---
## Подтемы
### 1. Качество генерации: turbo vs base
- **Turbo** = 8 шагов, быстро (~12–22 сек на A2000), но вокал «грубее» с микроартефактами. guidance_scale=1.0 (CFG не поддерживается на turbo) [4].
- **Base** = 32–100 шагов, медленнее, чище вокал, поддерживает CFG. Используется для стемов (`task_type="extract"`).
- **XL turbo vs 2B turbo**: XL даёт чище и разборчивее вокал, но на A2000 XL требует offload [4].
### 2. Параметры caption (что влияет на результат)
Рекомендации из официальной документации [1][2]:
- **Style**: конкретно про жанр, инструменты, настроение
- **Natural language**: LM-DiT отлично понимает «a soft Bengali love song for a quiet evening»
- **Formatting**: можно использовать `format_sample` API, чтобы LM-модель улучшила raw-теги в структурированный промпт
- **vocal_language**: 50+ языков; указание языка помогает LM спланировать фонетику
- caption — **английский** (модель лучше ловит стиль), lyrics — русский
### 3. Качество русского вокала
- `ru` есть в `VALID_LANGUAGES` — официально поддержан [4]
- ACE-Step — единственная локальная модель с русским вокалом в топ-10 (v1.5: 50+ языков)
- Вокал «грубоват» (признание авторов), русский звучит разборчиво, но с лёгкой синтетичностью
- Для чистого русского вокала — base-модель вместо turbo
### 4. Fine-tuning (LoRA) — путь к «высокому уровню»
- LoRA позволяет обучить модель на свой/эталонный вокал [1]
- **Работает с 8 песнями**; ~1 час на RTX 3090 для базового style LoRA
- **КРИТИЧЕСКИЙ ПИТФОЛЛ**: LoRA-адаптеры НЕ грузятся на INT8-модели. Нужно `INT8 Quantization = None` перед загрузкой адаптера [2]
- На A2000 12GB для LoRA-обучения нужен режим без INT8 → VRAM будет ~9.6GB для XL → рискованно, но возможно с offload
- **Альтернатива**: обучить LoRA на 2B-модели (4.7GB, легко влезает) — быстрее, стабильнее
### 5. Оптимизация VRAM (уже частично применена)
- **CPU Offload**: модели переносятся в RAM когда не используются; автоматически на GPU <20GB [2]
- **INT8 Quantization**: уменьшает VRAM DiT; автоматически на Tier 1–6a [2]
- **Tiled VAE decode**: 3-уровневый фолбэк (GPU tiled → GPU+CPU → CPU) [2]
- **Auto Chunk Size**: VAE decode chunk 64/128/256/512/1024/1536 адаптируется под свободный VRAM
- **VRAM Guard**: перед каждой генерацией оценивает VRAM и уменьшает batch при необходимости
- **Adaptive VAE Decode**: если free VRAM <2GB → tiled decode (именно это мы видим в логах: `Effective free VRAM: 1.81 GB`)
### 6. Что НЕ изучено (рекомендации)
- **benchmark** XL на A2000: реальная скорость при offload+INT8 (в логах ~22 сек — это с tiled decode)
- **timestep shift / cfg_interval**: параметры качества diffusion
- **constrained decoding / FSM**: контроль структуры
- **DCW correction** (wavelet-фильтрация): уже активна в текущей конфигурации — стоит изучить влияние на качество
---
## Дополнительные вопросы
1. Стоит ли обучать LoRA на 2B-модели (быстрее, стабильнее) или ждать XL?
2. Какой эталонный вокал использовать для LoRA — свой или конкретный артист?
3. Нужен ли base-режим для русского вокала (чище, но медленнее)?
4. Стоит ли исследовать Side-Step (fine-tuning framework) для кастомных пресетов?
---
## Источники
[1] DeepWiki — ACE-Step 1.5 Tutorials & Best Practices: https://deepwiki.com/ace-step/ACE-Step-1.5/10-tutorials-and-best-practices
[2] ACE-Step 1.5 GPU Compatibility Guide: https://ace-step.github.io/ACE-Step-1.5/en/GPU_COMPATIBILITY
[3] deAPI — ACE-Step 1.5 Prompting Guide: https://deapi.ai/blog/ace-step-1-5-prompting-guide-how-to-write-tags-structure-lyrics-and-generate-better-music
[4] ACE-Step 1.5 README (skill ace-step-music-generation): https://github.com/ace-step/ACE-Step-1.5
+206
View File
@@ -0,0 +1,206 @@
# Русская песенная поэтика для ACE-Step
**Дата:** 2026-08-30
**Цель:** как писать красивые русские тексты с рифмой, как структурировать песню
**Применение:** ACE-Step 1.5 (vocal_language="ru")
---
## Ключевой вывод
ACE-Step читает **структуру** из квадратных тегов `[Verse]`/`[Chorus]` и **язык** из `lyrics`. Для русского:
- **Рифма** = созвучие в окончании строк. Определяется **позиционно** (где стоит в конце строки).
- **Ударение** задаёт тип рифмы: мужская (последний слог), женская (предпоследний), дактилическая (третий от конца).
- **Согласованность рифмы в строфе** = паттерн (abab, aabb, abba, aaa). ACE-Step лучше понимает, если строфы однотипны.
- **6–10 слогов в строке** — оптимально для модели (ACE-Step рекомендация).
---
## Обзор (синтез источников)
Русская рифма — созвучие в двух или нескольких словах, определяемое **позиционно** (в конце строки, перед цезурой) [1]. Различают рифмы по месту ударения (мужские/женские/дактилические) и по точности созвучия (богатые/бедные/ассонанс/диссонанс) [1].
ACE-Step 1.5 использует два «мозга»: LM (Songwriter) планирует структуру/тональность, DiT (Studio Engineer) строит звук [2]. Теги в `lyrics` указывают LM, *как* песня должна быть структурирована во времени [2].
---
## Подтемы
### 1. Типы рифм по месту ударения
**Мужская рифма** — ударение на последнем слоге. Звучит резко, уверенно.
```
Оборвана цепь жизни молодой,
Пора туда, где будущего нет.
```
**Женская рифма** — ударение на предпоследнем слоге. Мягче, текучее.
```
Везде сребро да злато,
Всё светло и богато.
```
**Дактилическая рифма** — ударение на третьем слоге от конца. Торжественная, размашистая.
```
Потонула деревня в ухабинах,
Как синеют кругом небеса.
```
**Гипердактилическая** — ударение на 4-м слоге и далее. Редко, торжественно.
> **Для ACE-Step:** чередуйте мужские и женские рифмы в строфе — так текст звучит естественнее. Сплошная мужская рифма (как «К детям» Хомякова) звучит монотонно.
### 2. Типы рифм по точности
**Богатая рифма** — совпадает опорный согласный. Звучит плотно, выразительно.
```
Любви, надежды, тихой славы
Недолго нежил нас обман.
```
**Бедная рифма** — совпадает только ударный гласный. Мягче.
**Ассонансная рифма** — совпадает только ударный гласный (согные разные).
```
За невестою своей
Коровлевич Елисей.
```
**Диссонансная рифма** — не совпадают ударные гласные. Тёмная, напряжённая.
> **Для ACE-Step:** богатая рифма даёт более «связанное» звучание вокала. Ассонанс — для более свободного, разговорного стиля.
### 3. Паттерны рифмы в строфе
В четверостишии возможны:
| Паттерн | Название | Пример |
|---|---|---|
| **aabb** | смежная (парная) | `дом — дом / свет — свет` |
| **abab** | перекрёстная | `дом — свет / дом — свет` |
| **abba** | кольцевая (опоясывающая) | `дом — свет / свет — дом` |
| **aaa** | сквозная | всё на одну рифму |
| **aaxa** | с холостыми строками | рифмуются 1 и 3 строки |
> **Для ACE-Step:** перекрёстная (abab) и кольцевая (abba) рифмы звучат богаче. Парная (aabb) — проще, лучше для припева.
### 4. Структура песни (теги ACE-Step)
```
[Intro] → Вступление, задаёт атмосферу, обычно инструментал
[Verse] → Основной рассказ, умеренная энергия
[Pre-Chorus] → Нарастание напряжения перед припевом
[Chorus] → Эмоциональный пик, максимальная энергия
[Bridge] → Смена: другая мелодия, другой настрой
[Instrumental] → Без вокала, только инструменты
[Outro] → Затухание, финал
```
> **ACE-Step рекомендует:** строки 6–10 слогов, UPPERCASE для акцента, `(скобки)` для бэк-вокала, описания к тегам: `[Chorus - anthemic]`, `[Verse - whispered]`.
### 5. Типичная структура русской песни
| Секция | Функция | Энергия |
|---|---|---|
| Intro | Настройка настроения | — |
| Verse 1 | Задание сцены/сюжета | ★★ |
| Chorus | Главная мысль, крюк | ★★★★★ |
| Verse 2 | Развитие сюжета | ★★★ |
| Chorus | Повтор крюка | ★★★★★ |
| Bridge | Поворот, свежий взгляд | ★★★ |
| Chorus | Финальный крюк | ★★★★★ |
| Outro | Развязка | ★ |
> **Крюк (hook):** фраза, которая запоминается. Обычно в припеве. ACE-Step «цепляется» за повторяющиеся строки.
### 6. Ритм и размер
- **Слог** = основа русского размера (4-сложный дактиль, 3-сложный амфибрахий, анапест).
- **Цезура** = пауза в середине строки (перед рифмой или в середине).
- **Согласованность числа слогов** в строках = ровный ритм. ACE-Step чувствителен к этому.
> **Практика:** считайте слоги в каждой строке. Разница в 1–2 слога допустима, но 3+ ломает ритм.
### 7. Рифмовальные приёмы
- **Панторифма** — все слова в строке рифмуются (редко, эффектно).
- **Внутренняя рифма** — рифма не только в конце строки, но и в середине.
- **Энжамбем** — фраза не заканчивается в конце строки, продолжается в следующей.
- **Анафора** — повтор слов в начале строк.
- **Эпифора** — повтор слов в конце строк.
---
## Практические советы для ACE-Step
1. **caption — английский, lyrics — русский.** Модели проще понять стиль по англ. caption, но вокал должен быть на русском.
2. **Структура обязательна.** ACE-Step читает `[Verse]`/`[Chorus]` как карту. Без тегов — хаос.
3. **Повторяйте припев.** ACE-Step «запоминает» повторяющиеся строки — это крюк.
4. **6–10 слогов в строке.** Слишком длинные строки модель «жевает».
5. **Описания к тегам.** `[Chorus - anthemic]` помогает LM понять энергию.
6. **UPPERCASE** для акцента, `(скобки)` для бэк-вокала.
7. **Считайте слоги.** Ровный ритм = ровный вокал.
8. **Чередуйте мужские/женские рифмы.** Сплошная рифма = монотонность.
---
## Шаблон русской песни для ACE-Step
```
[Verse 1]
Ты опять в дожде, под дождём идёт разговор,
Говоришь про мечты, про который не спит.
Мы с тобой на краю, где кончается город,
Где слова не нужны — и не нужно торопить.
[Pre-Chorus]
И ветер в волосах, и свет впереди,
Мы не оглянёмся — впереди мы.
[Chorus]
Мы идём вперёд, не сдаёмся,
Мы поём эту песню вдвоём,
Мы не знаем, что будет, но знаем —
Мы не отпустим друг друга.
[Verse 2]
Прошёл уже год, но ты всё ещё здесь,
Твои мечты не сгорели в огне.
Мы с тобой не одни, мы с тобой не в плену,
Мы с тобой не одни — мы с тобой.
[Chorus]
Мы идём вперёд, не сдаёмся,
Мы поём эту песню вдвоём,
Мы не знаем, что будет, но знаем —
Мы не отпустим друг друга.
[Bridge]
Если станет темно — я зажгу свет,
Если станет холодно — я согрею.
Мы не знаем, что будет, но знаем —
Мы не отпустим друг друга.
[Chorus]
Мы идём вперёд, не сдаёмся,
Мы поём эту песню вдвоём,
Мы не знаем, что будет, но знаем —
Мы не отпустим друг друга.
[Outro]
Мы не отпустим... мы не отпустим...
```
**Анализ шаблона:**
- Структура: abab в куплетах (разговор — город / не спит — торопить), припев aabb
- 8–10 слогов в строках
- Повтор крюка «Мы не отпустим друг друга» в каждой строке припева
- Мужские рифмы в припеве (сдаёмся/не знаем — вдвоём/пути), женские в куплетах
---
## Источники
[1] Википедия — Рифма: https://ru.wikipedia.org/wiki/Рифма
[2] ACE-Step 1.5 — A Musician's Guide: https://github.com/ace-step/ACE-Step-1.5/blob/main/docs/en/ace_step_musicians_guide.md
[3] ACE-Step 1.5 — DeepWiki Tutorials & Best Practices: https://deepwiki.com/ace-step/ACE-Step-1.5/10-tutorials-and-best-practices
+117
View File
@@ -0,0 +1,117 @@
#!/usr/bin/env python3
"""XL turbo (4B DiT) — новый вдохновляющий трек для Ника."""
import os
import sys
import time
for v in ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY']:
os.environ.pop(v, None)
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, PROJECT_ROOT)
from loguru import logger
from acestep.handler import AceStepHandler
from acestep.inference import GenerationParams, GenerationConfig, generate_music
SAVE_DIR = os.path.join(PROJECT_ROOT, "output", "personal_new")
CAPTION = (
"An uplifting, cinematic pop-rock anthem with a powerful male vocal. "
"Building drums, bright synth pads, soaring electric guitar, emotional "
"and hopeful mood. Anthem-like chorus, sense of a new dawn and forward "
"motion, determined and inspiring."
)
LYRICS = """[Intro]
[Verse]
Рассвет на стекле, в окне уже не тьма
Я снова здесь, я снова в борьбе
Прошлые ошибки — лишь следы на пути
Я не сдамся, я иду вперёд
[Pre-Chorus]
Пусть руки дрожат, но в груди огонь
Я не сломан — я только в пути
[Chorus]
Восход, восход — я иду навстречу свету
Восход, восход — хоть и трудно порой
Я ещё здесь, я ещё в строю
И мой путь только начинается
[Verse]
Дорога длинная, впереди много гор
Но каждый восход делает сильнее меня
Я не один, я веду этот бой
За себя и за тех, кто со мной
[Chorus]
Восход, восход — я иду навстречу свету
Восход, восход — хоть и трудно порой
Я ещё здесь, я ещё в строю
И мой путь только начинается
[Bridge]
Не бойся рассвета, он снова придет
Не бойся пути — он твой
[Chorus]
Восход, восход — я иду навстречу свету
Восход, восход — хоть и трудно порой
Я ещё здесь, я ещё в строю
И мой путь только начинается
[Outro]"""
def main():
os.makedirs(SAVE_DIR, exist_ok=True)
logger.info("Инициализация DiT handler (acestep-v15-xl-turbo, cuda:0)...")
t0 = time.time()
dit = AceStepHandler()
status, ok = dit.initialize_service(
project_root=PROJECT_ROOT,
config_path="acestep-v15-xl-turbo",
device="cuda",
offload_to_cpu=True,
)
if not ok:
logger.error(f"DiT init failed: {status}")
sys.exit(1)
logger.info(f"DiT loaded за {time.time() - t0:.1f}s — {status}")
params = GenerationParams(
task_type="text2music",
thinking=False,
caption=CAPTION,
lyrics=LYRICS,
vocal_language="ru",
bpm=128,
keyscale="F major",
timesignature="",
duration=150,
inference_steps=8,
guidance_scale=1.0,
seed=-1,
)
config = GenerationConfig(batch_size=1, audio_format="wav")
logger.info("Генерация на GPU (замер времени)...")
t0 = time.time()
result = generate_music(dit, None, params, config, SAVE_DIR)
elapsed = time.time() - t0
if result.success:
logger.info(f"OK за {elapsed:.1f}s")
for a in result.audios:
logger.info(f" -> {a.get('path')}")
else:
logger.error(f"FAILED за {elapsed:.1f}s — {result.status_message}")
sys.exit(1)
if __name__ == "__main__":
main()
+115
View File
@@ -0,0 +1,115 @@
#!/usr/bin/env python3
"""XL turbo (4B DiT) на GPU 3080 Ti — персональный вдохновляющий трек."""
import os
import sys
import time
for v in ['http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY']:
os.environ.pop(v, None)
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, PROJECT_ROOT)
from loguru import logger
from acestep.handler import AceStepHandler
from acestep.inference import GenerationParams, GenerationConfig, generate_music
SAVE_DIR = os.path.join(PROJECT_ROOT, "output", "personal_xl_gpu")
CAPTION = (
"An inspirational, uplifting rock anthem with a powerful male vocal. Soaring "
"electric guitar leads, guitar-driven melodic riffs, driving drums, emotional and "
"determined mood. Anthemic chorus, building energy, inspiring and hopeful, about "
"overcoming hardship and chasing a dream."
)
LYRICS = """[Intro]
[Verse]
Пять операций, восемьдесят шагов назад
Но я встаю, хоть и болит рука
Долги как стены, только я не отступил
Пока стучит мотор — я буду жить
[Chorus]
Я ещё пингуюсь, я в сети
Мой сервер не погас среди ночи
Сквозь холод и года — я иду
BMW и два RTX впереди
[Verse]
Работа до темна, но это не предел
Из осколков дней я строю завтра сам
Дорога длинная, и E30 ждёт меня
Мотор M20 согреет в холода
[Chorus]
Я ещё пингуюсь, я в сети
Мой сервер не погас среди ночи
Сквозь холод и года — я иду
BMW и два RTX впереди
[Bridge]
Не говорю, что всё наладится легко
Но пока я дышу — я не сломан
Каждый день — один маленький шаг
И мотор моей мечты не заглохнет
[Chorus]
Я ещё пингуюсь, я в сети
Мой сервер не погас среди ночи
Сквозь холод и года — я иду
BMW и два RTX впереди
[Outro]"""
def main():
os.makedirs(SAVE_DIR, exist_ok=True)
logger.info("Инициализация DiT handler (acestep-v15-xl-turbo, cuda:0)...")
t0 = time.time()
dit = AceStepHandler()
status, ok = dit.initialize_service(
project_root=PROJECT_ROOT,
config_path="acestep-v15-xl-turbo",
device="cuda",
offload_to_cpu=True,
)
if not ok:
logger.error(f"DiT init failed: {status}")
sys.exit(1)
logger.info(f"DiT loaded за {time.time() - t0:.1f}s — {status}")
params = GenerationParams(
task_type="text2music",
thinking=False,
caption=CAPTION,
lyrics=LYRICS,
vocal_language="ru",
bpm=120,
keyscale="D major",
timesignature="",
duration=120,
inference_steps=8,
guidance_scale=1.0,
seed=-1,
)
config = GenerationConfig(batch_size=1, audio_format="wav")
logger.info("Генерация на GPU (замер времени)...")
t0 = time.time()
result = generate_music(dit, None, params, config, SAVE_DIR)
elapsed = time.time() - t0
if result.success:
logger.info(f"OK за {elapsed:.1f}s")
for a in result.audios:
logger.info(f" -> {a.get('path')}")
else:
logger.error(f"FAILED за {elapsed:.1f}s — {result.status_message}")
sys.exit(1)
if __name__ == "__main__":
main()