17 KiB
Executable File
title, created, updated, type, namespace, tags, related
| title | created | updated | type | namespace | tags | related | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Jellyfin Config | 2026-05-23 | 2026-09-26 | tech | family |
|
|
Jellyfin Config
⚠️ Обновлено 2026-09-26. Раздел ниже «URL / API Base / пути» описывает Kraken-инсталляцию (
/opt/jellyfin/,/media/*, префикс/jellyfin) и устарел для TrueNAS. Живой инстанс — на TrueNAS/Taiga, раздел «### Taiga (TrueNAS) — ЖИВОЙ ИНСТАНС» ниже. Проверено фактом 2026-09-26.
Users
| User | Password | Notes |
|---|---|---|
| alex | (set) | Admin |
| lisa | (none) | Cartoons library only |
API Key
87af49b6ff62ea68da6abdab0d7a4fbc
Used by automation scripts (watchlist-sync, media-pipeline agents).
⚠️ Для TrueNAS-инстанса этот ключ НЕ работает (проверено 2026-09-26: 401 Unauthorized, в логе Invalid token). Живой ключ — в разделе Taiga ниже.
Database / Maintenance
- Before any DB operation:
docker stop jellyfinfirst - Jellyfin runs as a Docker container on Kraken
- Config stored in
/opt/jellyfin/config/(check docker-compose for exact path)
API Endpoints (base: http://kraken:8096/jellyfin/)
Авторизация: заголовок X-MediaBrowser-Token: <API_KEY>
| Что | Endpoint | Метод |
|---|---|---|
| Инфо о сервере | /System/Info |
GET |
| Библиотеки (виртуальные папки) | /Library/VirtualFolders |
GET |
| Поиск по типу | /Items?includeItemTypes=Series&recursive=true&searchTerm=...&fields=Path |
GET |
| Удалить item | /Items/{id} |
DELETE |
| Полный рескан | /Items/Refresh?Recursive=true&RefreshMode=FullRefresh |
POST (требует Content-Type: application/json) |
Библиотеки
| Название | Путь | Назначение |
|---|---|---|
| Series | /media/series |
Сериалы (симлинки от router.py из sonarr) |
| Movies | /media/movies |
Фильмы |
| Cartoon Series | /media/cartoons-series |
Мультсериалы |
| Cartoons | /media/cartoons |
Мультфильмы |
| Documentaries | /media/documentaries |
Документалки |
| Documentary Series | /media/documentaries-series |
Документальные сериалы |
| Music | (пусто — библиотека не создана) | Музыка — заблокировано до починки тегов (см. Taiga-раздел ниже) |
Важно: Прямые пути sonarr (
/media/series-sonarr/,/media/movies-radarr/) не должны быть в библиотеках Jellyfin. Router.py создаёт симлинки из sonarr-папок в/media/series/и/media/movies/. Если symlink уже есть — дубли не появятся. Если есть старые дубли — удалить orphaned items черезDELETE /Items/{id}.
### Taiga (TrueNAS) — ЖИВОЙ ИНСТАНС
✅ Факт-проверка 2026-09-26. Всё ниже — с живой машины, не из Kraken-доки.
✅ Проверено 2026-09-26 (повторно, разведка под Lidarr): нижеприведённые данные подтверждены на живой машине. Музыкальной библиотеки по-прежнему нет, ремонт тегов не начат (этап 3 плана — апрув Alex по CSV v2). Дополнительно найдено: индексеры Prowlarr не работают (DNS-фильтр провайдера Тайги) → новый контент в Music через Lidarr сейчас невозможен. См. personal/plans/lidarr-taiga-and-indexer-unblock.
🔴 ДИАГНОСТИЧЕСКАЯ ЛОВУШКА, проверено 2026-09-26. Ранее в этой доке было записано «ключ
87af49b6ff62ea68da6abdab0d7a4fbcНЕ работает для TrueNAS (401 Unauthorized)». Это НЕВЕРНО.GET /System/Infoбез токена → 401 — это нормальное поведение живого сервера, а не признак неверного ключа. С префиксом/jellyfin/System/Info→ 404 (префикса на Тайге нет). Оба наблюдения легко принять за поломку. Живой ключ —eaglesetup2026taiga(раздел Taiga ниже); проверять ключ запросом с заголовком, а не по 401 на запросе без токена.
Расположение и монтирование
| Параметр | Значение |
|---|---|
| Хост | TrueNAS (192.168.2.197), доступ ssh truenas_admin@mallexxx.duckdns.org |
| Контейнер | jellyfin, образ из /mnt/RED_2TB/docker/arr/docker-compose.yml |
| URL (наружу) | https://jellyfin.mallexxx.duckdns.org (Caddy) |
| Внутренний порт | 8096 — БЕЗ префикса /jellyfin (префикс был Kraken-спецификой) |
| Монтирование 1 | /mnt/RED_2TB/docker/arr/jellyfin → /config (rw) |
| Монтирование 2 | /mnt/RED_2TB/storage → /storage (ro) |
| Сеть | caddy_default (только; media_net не подключён) |
API-ключ (живой)
eaglesetup2026taiga — имя ключа eagle-setup.
Источник (когда нужно перечитать): таблица ApiKeys в
/mnt/RED_2TB/docker/arr/jellyfin/data/data/jellyfin.db.
# Снять копию БД (безопасно; контейнер не останавливать для ЧТЕНИЯ копии)
cd /tmp && ssh truenas_admin@mallexxx.duckdns.org \
'cat /mnt/RED_2TB/docker/arr/jellyfin/data/data/jellyfin.db' > jf-copy.db
sqlite3 jf-copy.db "SELECT Name, AccessToken FROM ApiKeys;"
🔴
sqlite3на TrueNAS-хосте НЕ установлен (в доке встречается обратное). Рабочий приём: скопировать.dbна Mac (catчерез ssh) → читать локальнымsqlite3. ⚠️ Копия.dbбез-walможет отставать (WAL-режим). Для чтения ключа/списка библиотек этого достаточно — проверено, значения совпали с живыми.
Библиотеки (фактическое состояние 2026-09-26)
6 библиотек в BaseItems (тип MediaBrowser.Controller.Entities.CollectionFolder):
| Название | CollectionType |
PhysicalLocationsList |
|---|---|---|
| Movies | movies |
/config/data/root/default/Movies, /storage/Movies |
| Cartoons | movies |
/config/data/root/default/Cartoons, /storage/Cartoons |
| Documentaries | movies |
/config/data/root/default/Documentaries, /storage/documentaries |
| Series | tvshows |
/config/data/root/default/Series, /storage/series |
| Cartoon Series | tvshows |
/config/data/root/default/Cartoon Series, /storage/cartoons-series |
| Documentary Series | tvshows |
/config/data/root/default/Documentary Series, /storage/documentaries-series |
📌 У каждой виртуальной папки ДВА пути: служебный
/config/data/root/default/<Name>(создаётся Jellyfin автоматически) и реальный/storage/<Folder>. Реальный путь дополнительно виден какMediaBrowser.Controller.Entities.Folderс собственнымId. Music-библиотеки на 2026-09-26 НЕТ (в доке строкаMusicбыла пустой и остаётся незаполненной — см. план ниже).
Папка музыки — разведка 2026-09-26
| Параметр | Значение |
|---|---|
| Хост-путь | /mnt/RED_2TB/storage/Music |
| В контейнере | /storage/Music — уже смонтировано, доп. монтирование НЕ нужно |
| Объём | 7890 аудиофайлов (mp3/flac/m4a/ogg/wav/opus/aac) |
| Структура | 8 категорий: !A Not sorted, !Pop, Club, Любэ, !Retro, !Rock&Folk, !Барды, !Детские, !Классика, !Рэп, z Другое, Enigma, Ленинград |
| Мусор | bootmgr, .DS_Store, desktop.ini, Thumbs.db, convert_wma.sh, wma_convert.log — Jellyfin игнорирует |
| Права | truenas_admin:truenas_admin, drwxrwx--- (для PUID/PGID 921 путь доступен — /storage монтируется целиком) |
⚠️ Структура папок НЕ соответствует музыкальной раскладке (
Artist/Album). Jellyfin дляcollectionType=musicраскладывает по тегам, а не по папкам. Категории вида!Rock&Folk— «мусорные» имена из файловой системы, не артисты. Ожидаемый риск: файлы с пустыми тегами уедут вUnknown Artist. Вариант митигации —EnableFolderViewв настройках библиотеки (даёт навигацию по физическим папкам).
🔴 ПОДТВЕРЖДЕНО ФАКТОМ 2026-09-26: теги массово битые. Полная инвентаризация v2 (7906 файлов) дала точные цифры:
partial2920,mojibake2759,empty1026,lost662 (\ufffd— данные уничтожены, только перезапись из имён),clean537,corrupt2,probe_failed0. Полный разбор, план ремонта и CSV с предлагаемыми исправлениями — personal/tech/music-tags-repair-truenas. Пока теги не починены — Music-библиотеку не создавать.
🔴 ПИТФОЛЛ
ffprobe(2026-09-26):ffprobeмолча отдаёт пустые теги для валидного ID3v2.3 с битым фреймом (напр.comment='eng') —exit=0, пустой JSON, без ошибки. Так было потеряно 343 файла (Высоцкий и др.). Читать ID3 напрямую из байтов (id3_direct.py). Детали — personal/tech/music-tags-repair-truenas.
📋 ДОКУМЕНТЫ РЕВЬЮ ДЛЯ ALEX (2026-09-26, редакция v7) — CSV с предлагаемыми исправлениями выдан не только файлом, но и нотами в vault (
personal/plans/music-tags-review/): обзор + 3 блока. Формат v7 (утверждён Alex):1-needs-decision— папки + чекбоксы (осталось 4 файла);2-medium-confidence(5811) и3-high-confidence(958) — плоские списки- **файл.mp3** → artist — title, без заголовков и оглавлений. Один файл = одна строка. Это вход для апрува (шаг 3 плана ремонта). Генератор —render_grouped_doc.pyв~/Developer/personal-os/tools/music-tags/. Залито коммитом4464e64, синкнуто. Разбор волн 5–8 и питфоллы — personal/tech/music-tags-repair-truenas.
✅ Порядок работ (решение Alex 2026-09-26): ремонт тегов → валидация Alex → удаление
Music/backup/→ только потом создание Music-библиотеки. Бэкап кладётся вMusic/backup/и сносится до добавления библиотеки, поэтому исключатьbackupв настройках Jellyfin не нужно.
🔴 НОВЫЙ БЛОКЕР (2026-09-26, девятая волна): NAS
mallexxxНЕ резолвится с Mac. Проверено:ssh truenas_admin@mallexxx→Could not resolve hostname;192.168.1.100→ timeout (реальный IP в этой доке —192.168.2.197);~/.ssh/configзаписи про NAS не содержит./mnt/RED_2TBна Mac не смонтирован. Следствие: ни создание библиотеки (шаг 2), ни применение тегов сейчас невозможны — mp3 и API Jellyfin недостижимы. Работа идёт в локальном CSV. Перед планированием любых операций с Music сначала проверять доступность NAS.
⚠️ Ориентир для плана: NAS-хост в этой доке —
192.168.2.197(не192.168.1.100). Доступ объявлен какssh truenas_admin@mallexxx.duckdns.org— в девятой волне он не разрешился, причина не выяснена (сеть на Mac / DNS / NAS выключен).
API-команды (Taiga, без префикса)
TOKEN=eaglesetup2026taiga
# Список библиотек
curl -s -H "X-MediaBrowser-Token: $TOKEN" http://localhost:8096/Library/VirtualFolders
# Инфо о сервере
curl -s -H "X-MediaBrowser-Token: $TOKEN" http://localhost:8096/System/Info
🔴
/System/Infoбез токена →401— это НЕ поломка. Именно так и выглядит живой сервер. С префиксом/jellyfin/System/Info→404(префикса нет). Оба наблюдения 2026-09-26, оба могут сбить с толку при диагностике.
🔴 ПИТФОЛЛ: name и paths — в QUERY STRING, не в body
Создание библиотеки (Jellyfin 10.11):
# ПРАВИЛЬНО:
curl -s -X POST -H "X-MediaBrowser-Token: $TOKEN" \
"http://localhost:8096/Library/VirtualFolders?name=Music&collectionType=music&paths=/storage/Music"
# НЕПРАВИЛЬНО: name/paths в JSON-body → библиотека не создаётся
ПЛАН: добавить музыкальную библиотеку (согласован 2026-09-26, ЗАБЛОКИРОВАН)
🔴 ПЛАН ПЕРЕСМОТРЕН 2026-09-26 (позже в тот же день). Полная инвентаризация тегов (7906 файлов) подтвердила массовую порчу метаданных: mojibake + уничтоженные теги. Решение Alex: сначала починить теги, потом создавать библиотеку. Текущая работа — personal/tech/music-tags-repair-truenas (этапы 1–2 готовы в редакции v2, ждём апрув по CSV; CSV v1 был отклонён Alex за неразобранные
probe_failed). СоздаватьcollectionType=musicна битых тегах бессмысленно: Jellyfin раскладывает музыку по тегам, не по папкам — получится свалкаUnknown Artist.
6 шагов, в порядке исполнения (шаг 2 заблокирован до починки тегов):
- Бэкап конфига —
docker stop jellyfin→ tar/mnt/RED_2TB/docker/arr/jellyfin/→docker start jellyfin. Без остановки бэкап БД битый (WAL). - Создать библиотеку —
POST /Library/VirtualFolders?name=Music&collectionType=music&paths=/storage/Music(query string!). - Проверка API —
GET /Library/VirtualFolders→ Music в списке. - Скан — дождаться индексации 7890 файлов (~10–30 мин).
- ПРИЁМКА ALEX — открыть
https://jellyfin.mallexxx.duckdns.org→ вкладка Music → треки видны. Приёмка = видно в UI, не «API отвечает». - Обновить доки после подтверждения — таблица библиотек здесь +
family/projects/media-toolbox-taiga.md.
❓ Открытый выбор перед шагом 2: включать ли
EnableFolderView(навигация по папкам вместо тегов). Решается после выборочной проверки тегов файлов.
Связанные заметки
- personal/tech/music-tags-repair-truenas — 🔴 требуется ДО создания Music-библиотеки: починка 7906 битых тегов (этапы 1–2 готовы)
- family/projects/media-toolbox-taiga — *arr стек на Taiga (Prowlarr/Radarr/Sonarr/Transmission/Jellyfin)
- family/how-to/truenas-infrastructure — TrueNAS: контейнеры, доступ, структура пула
- family/how-to/navidrome-truenas-android — альтернативный музыкальный сервер (Navidrome) на той же папке
Music