- Rust 100%
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| metacollector.toml.example | ||
| README.md | ||
Metacollector
Утилита для организации аудиофайлов в структуру папок по альбомам с автоматическим исправлением и дополнением метаданных. Разработана для систематизации аудиофайлов, скачанных с Youtube. Фактически может разобрать поальбомно любую папку с мусорными аудиофайлами. Программа рассчитывает, что аудиофайлы уже отсортированы по исполнителям и просто правит метаданные, сортируя файлы по альбомам.
Возможности
- Разбор имён файлов — извлекает исполнителя и название трека из имени файла по шаблонам (
Artist - Title,Artist | Title,Title). - Чтение метаданных — считывает альбом, номер трека и обложку из тегов аудиофайла (lofty).
- Поиск альбомов — находит недостающий альбом через Discogs (пакетно для всего исполнителя или по каждому треку) и Last.fm.
- Автонумерация — нумерует файлы (
01 - Title.opus) на основе номера дорожки из тегов или ответа API. - Структура папок — раскладывает файлы по папкам
Artist/Album/. - Исправление тегов — записывает/обновляет метаданные (исполнитель, название, альбом, номер трека) внутри аудиофайла.
- Обложки — извлекает встроенную обложку в отдельный
cover.jpg. Опционально загружает обложку из интернета, если она качественнее встроенной (prefer_larger_art = true). - Синхронизированные тексты — загружает синхронизированные тексты (LRC) с lrclib.net.
- Фото исполнителя — загружает фото исполнителя с Discogs.
- Конфигурация — настройки через
metacollector.tomlв рабочей директории.
Поддерживаемые форматы
opus, mp3, flac, wav, m4a, ogg, wma, aac
Использование
metacollector [входная_папка] [выходная_папка]
По умолчанию входная папка — tests, выходная — совпадает со входной.
Каждая подпапка входной директории считается отдельным исполнителем. Если подпапок нет, вся входная директория обрабатывается как один исполнитель.
Конфигурация
Файл metacollector.toml (опционально):
discogs_token = "ваш_токен" # повышает лимит запросов к Discogs
lastfm_api_key = "ваш_ключ" # включает поиск через Last.fm (выключен по умолчанию)
prefer_larger_art = true # загружать обложку из интернета, если она больше встроенной (false по умолчанию)
Без токенов и ключей программа работает в режиме free API — Discogs без аутентификации (25 запросов/мин), Last.fm отключён.
Приоритет поиска альбома
- Тег альбома в файле — ноль запросов к API.
- Пакетный поиск Discogs — по всем трекам исполнителя сразу.
- Поиск по каждому треку — Discogs → Last.fm (если включён).
Ограничения
- Discogs: 25 запросов/мин без токена, ~60 с токеном. При превышении лимита возвращает 429 Too Many Requests.
- Last.fm: требуется бесплатный API-ключ. Без него поиск отключён.
- Сквозные точки монтирования:
fs::renameне работает между разными файловыми системами — используйте копирование. - Имена файлов: парсинг завязан на регулярные выражения; нестандартные форматы имён могут не распознаться.
- Обложки из API:
cover_imageвозвращается только поисковым эндпоинтом Discogs (per-file поиск). Пакетный поиск (batch) не предоставляет URL обложки.
Зависимости
- tokio, reqwest — асинхронные HTTP-запросы
- lofty — чтение/запись аудиотегов
- serde, serde_json, toml — конфиг и парсинг JSON
- regex — разбор имён файлов
- env_logger — логирование (RUST_LOG=debug для деталей)