myspoti
Native Android client for Spotify, built with Jetpack Compose
Visualize music with customizable graphics and audio tuning
AI summary · website content
MediaJavaScript · CSSGitHub @trsvar4iOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Виртуальный плеер, в котором графика в реальном времени реагирует на музыку. Неоновый стиль тюнингованной машины: кузов-дека с фарами, LED-эквалайзерами по бокам и подсветкой днища, которая пульсирует от баса.
Публичная ссылка: https://music-visualizer-pied.vercel.app
Фронтенд — чистые HTML, CSS и JavaScript без сборки. Бэкенд — функции Vercel: плейлист и настройки хранятся в облачной базе Turso, аудиофайлы и обложки — в Vercel Blob.
Визуализация
Облако
Плеер
Интерфейс
Ключи и токены живут только в переменных окружения — в коде и в репозитории их нет.
| Переменная | Откуда | Зачем |
|---|---|---|
TURSO_DATABASE_URL | интеграция Turso в Vercel (Storage → Turso) | адрес базы |
TURSO_AUTH_TOKEN | интеграция Turso в Vercel | доступ к базе |
BLOB_READ_WRITE_TOKEN | Vercel Blob (Storage → Blob) | загрузка и удаление файлов |
На Vercel эти переменные подставляются автоматически при подключении хранилищ к проекту. Каждый push в main деплоится сам.
npm install
npx vercel env pull .env.local # скачать переменные проекта (файл в .gitignore)
npm run dev # http://localhost:3000
Без облака можно указать в .env.local локальную базу: TURSO_DATABASE_URL=file:local.db (шаблон — в .env.example). Если сервер не отвечает на /api/health, страница сама переходит в режим «только браузер».
Микрофон и звук вкладки браузер разрешает только по https или на localhost. Звук вкладки работает в Chrome и Edge — в окне выбора нужно включить «Поделиться звуком».
| Клавиша | Действие |
|---|---|
Space | Play / Pause |
N / B | Следующий / предыдущий трек |
1–4 | Режим визуализации |
← / → | Перемотка на 5 секунд |
P | Следующий цветовой пресет |
L | Плейлист |
E | Эквалайзер и настройки |
F | Полноэкранный режим |
Esc | Закрыть панель |
браузер ──fetch──► /api/* (функции Vercel) ──► Turso: tracks, settings, eq_presets
│ │
│ └─ /api/upload выдаёт одноразовый токен
└──── файл трека напрямую ─────────────────► Vercel Blob
звук: файл → эквалайзер (5 × BiquadFilter) → лимитер → AnalyserNode → громкость → колонки
микрофон / вкладка ──────────────────────────────→ AnalyserNode
Каждый кадр requestAnimationFrame приложение забирает спектр и форму волны из AnalyserNode, раскладывает спектр на 64 логарифмические полосы и рисует сцену на <canvas>. Темп определяется автокорреляцией огибающей «всплесков» спектра за последние 8 секунд.
| Файл | Что внутри |
|---|---|
index.html | Разметка: сцена, боковая панель, дека плеера |
style.css | Неоновая тема, пресеты, адаптив |
app.js | Аудиограф, анализ, BPM, режимы Bars / Wave / Circle, плейлист и облачное хранилище, эквалайзер, источники |
scenes.js | Режим Dash и определение основного тона |
tags.js | Чтение тегов и обложек из MP3, FLAC и M4A |
api/tracks.js | Плейлист: список, добавление, удаление (вместе с файлами в Blob) |
api/settings.js | Настройки пользователя |
api/presets.js | Общая галерея пресетов эквалайзера |
api/upload.js | Токен для прямой загрузки файла в Vercel Blob |
api/health.js | Проверка, что база и хранилище подключены |
api/_lib.js | Подключение к Turso, схема таблиц, проверки |
vendor/blob-client.js | Браузерный клиент Vercel Blob (npm run build:blob-client) |
dev-server.js | Локальный сервер: статика + функции из api/ |
Пользователь анонимный: при первом заходе браузер получает случайный UUID и передаёт его в заголовке X-User-Id, поэтому у каждого браузера свой плейлист.