.звук
DotSound
За простым плеером стоит распределённая система: свой GPU-воркер для лирики, закрытое ядро для бизнес-правил.
суть
Загружай свои треки или подтягивай музыку из VK, SoundCloud, Spotify, YouTube и Яндекс Музыки: всё в одном плеере без рекламы. Заходишь через Telegram: открыл, нашёл, послушал. Лирика появляется построчно сама, подборки подстраиваются под вкус, а тяжёлое (ASR, разделение вокала, эмбеддинги) считает отдельный GPU-воркер.
Платформа изнутри
Интерактивный разбор ключевых механик. Выбери домен, увидишь как всё работает изнутри.
Загрузка треков
Трек заходит в систему один раз и навсегда.
При загрузке файл проверяется на вирусы и получает уникальный цифровой отпечаток. Если такой трек уже есть в базе, он не дублируется, вместо этого прибавляется счётчик. Один файл в хранилище, сколько бы людей его ни заливали.
- Velvet fog in my lungs, I breathe slow
- You said I'm too cold, I said "Yeah, I know"
- Welcome to forever
- Okay, it's shorter than you think
- Ты запомнишь меня, you'll remember me
- LIPSTICK Kai Angel ft. 9mice 2:47
- JUMP! Kai Angel 3:12
- DANCE LIKE U IN PAIN Kai Angel 1:27
- SLAYERR Kai Angel 1:55
- welcome to forever Kai Angel 2:48
добавлено в каталог
- ONDA ANDAR артист транслит онда → onda
- red weather ONDA ANDAR · 2025 метаданные
- Ночное кафе Mirèle & ONDA ANDAR fuzzy-совпадение
нажмите на задачу, покажу что она делает
масштаб
размер и срок: что стоит за продуктом.
архитектура
Тонкий aiogram-клиент: вход в Mini App, inline-поиск, лайки
- Backend Hub HTTPS
Веб-плеер платформы: загрузка треков, HLS-стриминг, WebSocket
- Backend Hub WS · HLS
Pull-воркер на GPU: Demucs + faster-whisper, аудио-эмбеддинги
- Backend Hub HMAC pull
FastAPI: API, очередь Taskiq, дедуп по SHA-256, HLS, раздача Mini App
- PrivateCore import
- PostgreSQL 16
- Redis 7
- Elasticsearch 8
- MinIO · S3
PrivateCore: бизнес-правила, политика выдачи, security-константы
Метаданные, пользователи, плейлисты; ~70 моделей, 241 миграция
WS pub/sub, rate-limit, кеш file_id, счётчики прослушиваний
Полнотекст по трекам, артистам и распознанной лирике
Content-addressed аудио по SHA-256, HLS-сегменты
стек
- Язык 2
- Фреймворк 5
- Данные 4
- Инфраструктура 4
- Клиент 3
- AI / ML 3
Язык
- Python 3.12
- TypeScript
Фреймворк
- FastAPI 0.136
- SQLAlchemy 2
- aiogram 3.28
- React 18
- Vite 5
Данные
- PostgreSQL 16
- Elasticsearch 8
- Redis 7
- MinIO / S3
Инфраструктура
- Docker
- Taskiq
- HMAC pull protocol
- Prometheus + OpenTelemetry
Клиент
- Telegram Mini App
- WebSocket
- hls.js
AI / ML
- faster-whisper 1.2
- Demucs 4.0
- PyTorch 2.7
что умеет
ключевые возможности продукта прямо сейчас.
Загрузка прямо в плеере
Трек заливается из самого веб-плеера: устойчивая докачка кусками, проверка дублей ещё до отправки, своя обложка и видео. Ни отдельной формы, ни приложения для установки.
Загрузка идёт частями (S3 multipart) и переживает обрыв связи и перезагрузку вкладки, потому что очередь хранится в IndexedDB и сама возобновляет докачку. Сервер берёт SHA-256 от содержимого: повторная заливка того же трека не создаёт копию, а добавляет ссылку (ref_count++). Один файл на всех.
Авто-лирика (ASR)
Demucs снимает вокал, faster-whisper расшифровывает и синхронизирует текст построчно с тайм-кодами. Слова появляются сами.
Пайплайн на воркере: Demucs (--two-stems=vocals) снимает вокал, faster-whisper расшифровывает, выравнивание ставит тайм-код каждой строке, и текст всплывает синхронно с музыкой.
HLS + дедуп по содержимому
Адаптивный HLS поверх content-addressed storage: один и тот же трек хранится один раз для всех, сегменты кешируются как immutable.
Адресом сегмента служит сам хеш содержимого: blobs/a1/a1f9...ts. Одинаковый трек не транскодируется дважды, а сегменты кешируются как immutable на год.
Поиск по тексту и метаданным
Полнотекстовый Elasticsearch-индекс по метаданным и распознанной лирике с ранжированием по популярности.
Индексируются и метаданные, и распознанная лирика, поэтому трек находится по строчке из песни. Ранжирование идёт по популярности.
Личные подборки и радио
Daily Mix, Weekly Mix, жанровые подборки и бесконечное радио от любого трека: лента подстраивается под то, что слушаешь.
Похожие треки и артисты считаются по аудио-эмбеддингам на воркере, а правила ранжирования и политика выдачи живут в закрытом ядре. Радио стартует от трека-затравки и тянет ближайших соседей по вектору.
Совместные плейлисты
Плейлисты с совместным редактированием и обложкой-коллажем, которая собирается сама из обложек добавленных треков.
Несколько соавторов ведут один плейлист; обложка пересобирается из обложек треков. CRUD и совместный доступ реализованы на бэкенде, без отдельного приложения.
Telegram как точка входа
Тонкий бот: вход в плеер одним тапом, inline-поиск треков в любом чате, лайки и подборки прямо в Telegram. Туда же приходят уведомления о входах и готовности задач.
Бот ничего не решает сам: читает сообщение и дёргает единый Backend-клиент, вся логика в ядре. Inline-режим отдаёт треки с кнопками play и like прямо в переписку.
Импорт из источников
Загружай свои треки прямо из плеера или импортируй из SoundCloud, YouTube, VK, Яндекс Музыки и Spotify: каталог наполняется без лишних шагов.
Личные треки заливаются из веб-плеера кусками (S3 multipart). Внешние источники импортируются так: SoundCloud, YouTube и VK через yt-dlp; Spotify и Яндекс Музыка подключаются привязкой аккаунта по OAuth. Каталог растёт без ручной заливки.
GPU-офлоад по HMAC
Воркер сам забирает задачи по HMAC и считает лирику и рекомендации на GPU. Никаких открытых портов наружу.
Цикл воркера: heartbeat → claim с арендой и дедлайном → забор аудио по одноразовой ссылке OTT (5 минут, под один IP) → результат. Наружу не открыто ни одного порта.
Модерация и закон
Жалобы на треки, авто-скрытие по порогу и админ-модерация. Часть соц-функций (чаты, комментарии) сознательно отключена под требования к ОРИ по 149-ФЗ.
Жалобы копятся на трек и при достижении порога скрывают его автоматически до решения модератора. Отключённые функции остаются в коде с пометкой и не подключены к маршрутам, их можно включить, когда позволит регуляторика.
хронология
как продукт рос от первой версии.
-
27 Mar 2026
Старт проекта: первый коммит
27 марта 2026, 12:13: первый коммит. За день поднята первая версия в двух репозиториях (Backend + Bot): FastAPI, PostgreSQL 16, React 18 Mini App, Telegram-вход; SHA-256-дедупликация не даёт треку храниться дважды.
-
31 Mar 2026
Адаптивный HLS-стриминг
Двухбитрейтный HLS (128k/64k) поверх content-addressed хранилища: сегменты кешируются как immutable.
-
12 Apr 2026
PrivateCore: закрытое ядро
Бизнес-правила, политика выдачи и security-константы вынесены в отдельный закрытый репозиторий PrivateCore, четвёртый в экосистеме. Открытый клиент ходит в него по internal-token со scoped JWT; тогда же добавились passwordless-вход (Magic Link) и TOTP-2FA.
-
22 Apr 2026
ComputeWorker: GPU-воркер
Третий открытый репозиторий: GPU-воркер на Demucs + faster-whisper. Вокал снимается, лирика расшифровывается и синхронизируется построчно.
-
24 Apr 2026
Поиск, импорт и хранилище по содержимому
Полнотекстовый Elasticsearch по трекам и лирике; импорт из SoundCloud, Spotify, YouTube и VK; аудио хранится по SHA-256 с ref-count, один файл на всех.
-
26 Apr 2026
Рекомендации и радио
Аудио-эмбеддинги на воркере, Daily/Weekly Mix, бесконечное радио от трека-затравки и совместные плейлисты; правила ранжирования живут в закрытом ядре PrivateCore.
-
7 May 2026
iOS-редизайн интерфейса
Motion-примитивы, Dynamic Island и эстетика Apple Music; gapless-кроссфейд между треками и караоке-синхронизация лирики.
-
10 May 2026
Право и модерация
Приведение под 152/149/242/436-ФЗ, текстовая цензура лирики и описаний, авто-скрытие треков по жалобам и анти-абьюз.
-
17 May 2026
Офлайн и прод-хардинг
Полный офлайн-режим с автокешем и предзагрузкой, выделенный egress-пул стриминга с Tor-цепочками, ClamAV-скан загрузок, диспетчер фоновых задач, Prometheus + OpenTelemetry и SSH-деплой.
-
Jun 2026
Сейчас: source-available и стабилизация
Три открытых репозитория экосистемы выложены как source-available showcase с лицензиями, gitleaks в CI и документацией в стандарте DotCore; PrivateCore остаётся закрытым. Новых модулей нет, идёт точечная доводка качества лирики и рекомендаций.
репозитории
- Backend hub
Сердце системы: API, база, очередь задач, раздача React Mini App, дедуп по SHA-256, HLS-стриминг и полнотекстовый поиск.
github.com/network-user/DotSoundBackend - Bot telegram-ui
Тонкий клиент Telegram: вход в Mini App, inline-поиск, лайки и подборки, уведомления о входах. Вся логика живёт в ядре.
github.com/network-user/DotSoundBot - ComputeWorker asr-worker
Pull-based воркер на faster-whisper + Demucs с HMAC-протоколом: лирика и рекомендации считаются на GPU без открытых портов.
github.com/network-user/DotSoundComputeWorker