Femida Archive — наш собственный проект: веб-приложение для управления персональной музыкальной библиотекой. Оно нужно там, где обычные плееры и медиасерверы заканчиваются: андеграундные релизы без записей в базах, россыпь сингловых файлов, дубликаты, папки с разными схемами именования.
Главный принцип
База данных Femida Archive — источник истины. Discogs, Spotify, MusicBrainz и другие сервисы — внешние поставщики данных: они встраиваются в систему, но никогда не диктуют ей структуру.
На практике это значит, что автор релиза определяется вами, а не тем, как он записан во внешней базе. Если Discogs приписал кредит участнику группы вместо самой группы — вы исправляете это у себя, а внешняя запись остаётся лишь ссылкой. Внешние идентификаторы (Discogs, Spotify и др.) — это связи с источниками, а не определения сущностей.
Из чего состоит
- Библиотека. Артисты, релизы, треки, алиасы артистов, участники групп, кредиты, жанры, плейлисты, оценки.
- Движок метаданных. Подтягивание данных из MusicBrainz и Discogs (и не только) с ручной корректировкой.
- Визуальный архив. Обложки, постеры, арт артистов; обложки берутся из файлов, тегов и внешних источников.
- Менеджер загрузок. Скачивание по ссылке или текстовому запросу через yt-dlp с показом прогресса.
- Организатор библиотеки. Сопоставление файлов с релизами, запись тегов, нормализация имён папок и файлов, автоимпорт из структуры каталогов.
- Мультиссылки. Публичные страницы релиза со ссылками на площадки и QR-кодом.
- Физический дизайнер. Макеты вкладышей для CD и кассет с экспортом в PDF.
- Плеер. Встроенное воспроизведение прямо из библиотеки.
Технологический стек
| Слой | Технологии |
|---|---|
| Интерфейс | Next.js (App Router), TypeScript, Tailwind |
| API | Node.js, Fastify, Drizzle ORM |
| Данные | PostgreSQL, Redis |
| Очереди и загрузка | BullMQ, yt-dlp, ffmpeg |
| Репозиторий | Монорепо на pnpm workspaces |
Как это работает вместе с остальной лабораторией
Приложение живёт в отдельном LXC-контейнере на Proxmox, музыкальный архив монтируется с NAS, а сама коллекция параллельно раздаётся через Jellyfin. Разработка ведётся локально, выкатка — одной командой, без правок на сервере вручную.
Статус. Проект личный и активно развивается; доступ к работающему приложению закрыт, поэтому гостевая кнопка на главной ведёт сюда — к описанию идеи и устройства.