Кейсы CodeVibers / LikeXR Найти применение в бизнесе

Neuro Muzyka: генеративный продукт и пользовательский опыт

Neuro Muzyka — внутренний генеративный продукт CodeVibers, созданный для тестирования AI-музыкальных пайплайнов и пользовательского принятия. В кейсе — как мы вышли на MVP за 3 недели, где застряли и как это помогает нам сегодня предлагать клиентам AI-интеграции.

Что такое Neuro Muzyka?

Neuro Muzyka — это MVP-продукт, созданный в CodeVibers для внутреннего тестирования генеративного AI-музыкального стека. Он генерирует короткие (15–60 сек) фоновые треки по текстовому описанию (например, «лоу-фай хип-хоп, дождь за окном, 80 BPM») и позволяет пользователю оценить результат, сохранить или перегенерировать. Цель — не монетизация, а обучение: понять, как пользователи реагируют на AI-музыку, какие ограничения мешают внедрению и как строить UX для генеративных продуктов.

Пример пользовательского пути

Пользователь заходит на сайт → вводит описание → выбирает стиль (по умолчанию — «нейролоу», «киберпоп» или «эко-джаз») → нажимает «Сгенерировать». Через 8–12 секунд получает трек с визуализацией волны, BPM и тегами. Далее может:

  • Слушать встроенным плеером;
  • Скачать в MP3 (128 kbps);
  • Сохранить в личный плейлист;
  • Оценить (👍/👎) и оставить комментарий;
  • Сгенерировать похожий (с вариацией).

Все действия логируются анонимно: время генерации, клики, оценки, комментарии — для анализа UX-фрустраций.

Архитектура MVP

flowchart TD
    A[Telegram Web App / Web UI] --> B[FastAPI Backend]
    B --> C[Stable Audio Open 2.0]
    B --> D[Whisper v3 for lyrics (опционально)]
    B --> E[Lyrics-to-Mood Parser]
    C --> F[Audio Cache + Embedding DB]
    E --> G[User Feedback Loop]
    G --> H[Reinforcement Fine-tuning (on 500+ votes)]
    B --> I[Rate Limiter: 3 req/min per user]
    I --> A

Ключевые решения: открытая модель (Stable Audio Open), а не проприетарная; кэширование для сокращения времени отклика; Telegram Web App как быстрый старт (без отдельного фронтенда).

Типичные ошибки при запуске

  • Переоценка качества AI-музыки. Пользователи ждали «как у человека», а получали шум в 20% треков. Решение: добавили «демо-тег» и предупреждение: «Это эксперимент. Трек может не совпасть с описанием».
  • Слишком длинный тайм-аут. 12 секунд — это критично для UX. Сократили до 8 сек, убрав лишние пост-процессы (например, генерацию спектрограммы).
  • Отсутствие контроля качества. Первые 100 треков были «на слух» — без мета-тегов. Добавили автоматическую теггинг по эмоциям (с помощью DistilBERT) и BPM-оценку.

Что проверить перед запуском генеративного MVP

КритерийПочему важноКак проверить
Время генерации < 10 секПотеря внимания после 8 секТест на 20 пользователях с таймером
Четкое демо-ограничениеСнижает ожидания, повышает лояльностьПроверка текста в UI и в README
Механизм обратной связиБез оценок — нет данных для улучшенияКнопки 👍/👎 + комментарий
Кэширование и fallbackИзбегает 500-х при падении моделиИмитация ошибки модели: должен показываться fallback-трек

Экономика MVP: что мы сэкономили

Запуск за 3 недели, бюджет — 120 000 ₽ (внутренние ресурсы). Основные статьи расходов:

  • GPU-кредиты (Hugging Face + Yandex Cloud): ~45 000 ₽/мес (но только 2 недели активного теста → ~7 500 ₽)
  • Разработка (2 инженера × 3 недели): ~100 000 ₽
  • Тестирование (5 пользователей × 2 сессии): ~12 500 ₽

Итого: ~120 000 ₽. Без внутреннего ресурса — ~350 000 ₽ (внешний фронтенд + DevOps + QA).

Важно: мы не делаем монетизацию. Продукт — «лаборатория» для понимания, как AI-музыка влияет на вовлеченность в продуктах клиентов (например, в LikeXR).

Псевдокод: как работает генерация

function generateTrack(prompt: string, style: Style): Track {
  // 1. Парсинг и улучшение промпта
  const enrichedPrompt = moodParser.enhance(prompt, style)
  
  // 2. Генерация аудио (Stable Audio Open)
  const audioBytes = stableAudio.generate({
    prompt: enrichedPrompt,
    duration: 30, // сек
    style: style.id
  })
  
  // 3. Пост-обработка
  const bpm = estimateBPM(audioBytes)
  const tags = tagger.extract(audioBytes)
  
  // 4. Кэширование
  cache.set(`track:${hash(prompt)}`, {
    audio: audioBytes,
    bpm,
    tags,
    createdAt: now()
  })
  
  return {
    id: uuid(),
    audioUrl: s3.upload(audioBytes),
    bpm,
    tags,
    isDemo: true
  }
}

Ключевая особенность: isDemo: true — флаг, который отображается в UI и влияет на логику (например, запрет на коммерческое использование).