Filename Title Checker
Checks scene titles against video filenames, compares configured GraphQL/Stash-box metadata sources, applies chosen metadata to Stash scenes, and can rename/move selected mismatches.
No reviewer has approved this plugin yet. Read the source before installing, or review it for the community.
sha256 7f744cdc595e37d8d8f22f9b7509dfccc2bdd5fe20ced6b4b9327d69c819ecdd
- Last updated
Oct 6, 2026- First created
- Version
0.4.6-5b7ac49- Package id
filename-title-checker- Commits
- 2
- Repo stars
- 2
README
Filename Title Checker for Stash
Версия: 0.4.6
UI-плагин для Stash, который проверяет соответствие Title сцены имени видеофайла, помогает находить отличия Studio, сравнивает метаданные из нескольких настроенных GraphQL/Stash-box источников и позволяет выборочно переименовывать/перемещать найденные видео.
Что нового в v0.4.6
- Исправлено сравнение серийных маркеров: различается только разделитель между сезоном и эпизодом, но номера должны совпадать.
S2-E3,S2:E3,S2.E3иS2E3считаются одинаковыми.S2-E3иS2:E2считаются разными;S3-E3иS2:E3также считаются разными.- Удалён ошибочный fallback v0.4.5, который полностью игнорировал номера сезона/эпизода.
- Версия по-прежнему основана на v0.4.4 и не содержит отменённого «быстрого режима» по Stash ID.
Что нового в v0.4.4
- В панели фильтров добавлен выпадающий список «На странице»: 20, 40, 50, 60, 80 или 100 видео. Прежнее значение по умолчанию — 50.
- Изменение числа строк пересчитывает страницы и переводит на страницу 1; номер страницы в нижней навигации и кнопки «Назад/Вперёд» используют новое значение.
- Выбор видео на других страницах и уже загруженные GraphQL-результаты не сбрасываются при изменении размера страницы.
- Выбранное число строк сохраняется в localStorage браузера для следующего открытия плагина.
Что нового в v0.4.3
- Рядом с кнопкой «Сохранить в Scene и переименовать» добавлена кнопка «Сохранить в Scene с именем файла».
- Новый режим сохраняет выбранные GraphQL-метаданные (Studio, Date, Performers, Tags, Details, изображение, URL/Stash ID и другие доступные поля), но Title берёт из текущего имени видеофайла.
- Title извлекается тем же парсером шаблонов, который используется Filename Title Checker для проверки файлов.
- После сохранения выполняется обычное автоматическое переименование/перемещение по итоговым данным.
- Если Title нельзя надёжно извлечь из имени файла, новая кнопка недоступна и данные не сохраняются.
Что нового в v0.4.2
- Исправлен расчёт целевой Studio для сцен, у которых
Scene.studioещё не заполнена. - Приоритет Studio при переименовании/перемещении: выбранные GraphQL-данные → Studio Scene → Studio, распознанная из текущего имени файла →
No Studio. - Если Studio из выбранного GraphQL-результата эквивалентна Studio в текущем имени/папке, сохраняется существующее написание и лишнего перемещения не происходит.
- Пример:
Karup's Private Collection/2016-04-08 - Karup's Private Collection - Baby - [WEBDL-720p].mp4при пустой Studio в Scene больше не планируется к переносу вNo Studio; после выбора GraphQL StudioKarup's Private Collectionфайл остаётся в той же папке.
Что нового в v0.4.1
- Исправлена ошибка
UNIQUE constraint failed: scene_stash_ids.scene_id, scene_stash_ids.endpointпри сохранении GraphQL-результата. - Для одной Scene теперь сохраняется не более одного Stash ID на каждый GraphQL endpoint.
- Если выбранный результат того же источника содержит другой
stash_id, старый ID этого endpoint заменяется новым, а Stash IDs остальных источников сохраняются. - Эквивалентные endpoint с отличием только в регистре или завершающем
/также не дублируются.
Что нового в v0.4.0
- Общий чекбокс в заголовке таблицы теперь выбирает и снимает выбор только с доступных видео на текущей странице.
- Счётчик выбора показывает количество выбранных видео на текущей странице; если есть выбор на других страницах, дополнительно показывает общее количество.
- Выбор, сделанный вручную на других страницах, сохраняется при навигации.
Что нового в v0.3.8
- Поле Performers в результатах GraphQL подсвечивается жёлтым, если одинаковый набор актёров найден минимум в двух разных GraphQL-источниках.
- Порядок актёров и регистр не влияют на сравнение.
- Совпадение нескольких вариантов внутри одного источника само по себе не считается межисточниковым подтверждением.
Что нового в v0.3.7
- Убрана оранжевая подсветка несовпадающих полей в результатах GraphQL.
- Добавлена зелёная подсветка совпадающих
Title,StudioиDate. - Для сравнения в первую очередь используются данные, извлечённые из текущего имени файла по шаблону
Date - Studio - Title - [Quality]; если поле из имени извлечь нельзя, используется текущее значение Scene. - Для Studio зелёная подсветка использует те же правила эквивалентности, что и остальной плагин: например
AcademyPOV=Academy POV. - Title с внутренними разделителями
-корректно извлекается из имени файла целиком до блока[Quality].
Что нового в v0.3.6
- Исправлено сравнение Studio в карточках результатов GraphQL.
- Для подсветки теперь используется то же правило
studioNamesEquivalent, что и для папок, имён файлов и перемещения. - Эквивалентные варианты вроде
AcademyPOV/Academy POV,5K Teens/5Kteens,Free Use MILF/Freeuse MILF,Got Mylf/Got MYLFне подсвечиваются как различие. - Действительно другая Studio, например
School POVпри текущейAcademy POV, продолжает подсвечиваться оранжевым.
Что нового в v0.3.3
- исправлено поведение выбора результата GraphQL: выбранные данные теперь записываются непосредственно в карточку Scene в базе Stash через
sceneUpdate; - кнопка переименована в «Сохранить в Scene и использовать», чтобы действие было однозначным;
- сохраняются доступные
Title,Date,Code,Details,Director, URLs и обложка; - выбранная Studio назначается Scene; если соответствующей локальной Studio ещё нет, плагин сначала ищет её по точному имени и при необходимости создаёт;
- аналогично сохраняются Performers;
- Tags из источника добавляются к существующим тегам Scene, а не удаляют локальные теги;
- Stash ID выбранного GraphQL-источника добавляется к Scene без удаления уже существующих Stash IDs;
- пустые поля результата не очищают заполненные поля Scene;
- после сохранения библиотека автоматически перепроверяется, поэтому следующая проверка использует уже новые метаданные Stash;
- текущая страница списка восстанавливается после перепроверки;
- локальный сохранённый вариант остаётся только как резерв для расчёта переименования; источником истины теперь является сама Scene в Stash.
Что нового в v0.3.2
- после завершения GraphQL-сверки чекбоксы файлов, участвовавших в запросе, автоматически снимаются;
- для пакетной сверки снимаются все выбранные видео, даже если у одной Scene было выбрано несколько файлов;
- добавлено нормализованное сравнение названий Studio без учёта регистра и пробелов;
- поэтому
5K Teens=5Kteens,AcademyPOV=Academy POV,Free Use MILF=Freeuse MILF,Got Mylf=Got MYLF; - то же правило применяется к Studio, извлечённой из имени файла;
- если текущая папка видео отличается от Studio только пробелами/регистром, она считается корректной и файл не перемещается только ради изменения написания папки;
- все функции v0.3.1 сохранены.
Что нового в v0.3.1
- для каждого результата GraphQL/Stash-box теперь отображается изображение сцены, если источник его вернул;
- изображение берётся из штатного поля
ScrapedScene.imageчерез backend Stash; - если источник не вернул изображение, карточка явно показывает это вместо ошибки;
- изображения используются только для визуального сравнения и не сохраняются в localStorage, чтобы не переполнять хранилище браузера;
- все функции v0.3.0 сохранены.
Что было добавлено в v0.3.0
- добавлен блок GraphQL-источники со списком Stash-box/GraphQL источников, настроенных в Stash;
- можно включить один или несколько источников для сравнения;
- у каждой строки появилась кнопка «Сверить GraphQL»;
- для отмеченных чекбоксами строк есть массовая кнопка «Сверить GraphQL для выбранных»;
- запросы выполняются через сам Stash по fingerprints сцены (
scene_id), без передачи API-ключей в JavaScript плагина; - под видео отображаются результаты каждого источника отдельно;
- если источник возвращает несколько совпадений, показываются все варианты;
- отображаются доступные
Title,Studio,Date,Performers,Code,Director,Duration,Tags,Detailsи URLs; - отличающиеся от текущей сцены
Title,StudioиDateвизуально выделяются; - любой найденный вариант можно выбрать кнопкой «Сохранить в Scene и использовать»;
- начиная с v0.3.3 выбранные данные записываются в Scene Stash и дополнительно сохраняются локально как резерв для расчёта имени и папки;
- сохранённый вариант можно отменить кнопкой «Не использовать»;
- в v0.3.0–v0.3.2 сохранение не изменяло Scene; начиная с v0.3.3 выбранные метаданные применяются к Scene Stash;
- все функции v0.2.1 сохранены.
Как работает GraphQL-сверка
Плагин читает список источников из конфигурации Stash (stashBoxes). Внешние GraphQL endpoint и API-ключи не вызываются напрямую из браузера.
Для каждого выбранного источника плагин обращается к GraphQL самого Stash и использует scrapeSingleScene с stash_box_endpoint и scene_id. Stash выполняет поиск по fingerprints файлов сцены и возвращает найденные метаданные.
Это позволяет сравнить, например:
- текущие данные Scene в Stash;
- результат StashDB;
- результат TPDB/Stash-box;
- другой совместимый Stash-box источник, уже настроенный в Stash.
Если источник не находит сцену по fingerprints, под ним выводится сообщение «Совпадений по fingerprints не найдено».
Сохранённые данные
Кнопка «Сохранить в Scene и использовать» применяет выбранный вариант к Scene через GraphQL sceneUpdate и дополнительно сохраняет компактную копию в localStorage браузера. Для конкретной Scene запоминаются в том числе:
- Title;
- Studio;
- Date;
- Performers;
- источник и remote ID;
- дополнительные поля результата.
При построении целевого имени и папки плагин использует сохранённые Title, Studio, Date и Performers вместо текущих значений Scene.
Начиная с v0.3.3 база Stash обновляется. Локальная копия используется только как резерв для немедленного расчёта имени файла; после автоматической перепроверки используются уже сохранённые данные самой Scene.
Шаблон переименования
Основной шаблон перенесён из приложенного renamer-dev:
Date - Studio - Title - [WEBDL-Height].ext
Пример:
2026-08-21 - SexArt - Beside You - [WEBDL-1080p].mp4
Если для Scene выбран результат GraphQL, в шаблон подставляются сохранённые значения GraphQL. Если сохранённого результата нет — используются текущие данные Scene в Stash.
Правила:
- используется
Scene.dateили сохранённая GraphQL Date; - используется
Scene.studio.nameили сохранённая GraphQL Studio; - используется
Scene.titleили сохранённый GraphQL Title; - высота берётся из выбранного
VideoFile.height; - расширение исходного видео сохраняется;
- недопустимые для имени файла символы
< > : " / \\ | ? *заменяются на-; - отсутствующие поля пропускаются.
Специальный шаблон из renamer-dev
Для Studio 1By-Day111 сохранено правило:
Studio - Date - Performers - Title
Исполнители сортируются по имени, максимум 3, как в приложенном renamer-dev. Если выбран GraphQL-вариант, могут использоваться сохранённые Performers.
Перемещение
Обычная сцена переносится в:
<текущий Stash Library Path>/<Studio>/
Если сохранённый GraphQL-вариант содержит другую Studio, целевая папка рассчитывается уже по этой Studio.
Например:
Текущая Studio в Stash: Wrong Studio
Сохранённый GraphQL-вариант: SexArt
Целевой путь:
<Library Path>\SexArt\Date - SexArt - Title - [WEBDL-1080p].mp4
Если Studio отсутствует, используется папка No Studio.
Специальный путь Movie
Сохраняется правило из renamer-dev:
Movie -> E:\Movies\<Studio>\
Операция разрешается только если путь находится внутри одного из Stash Library Paths.
Как выполняется переименование
Плагин использует штатную GraphQL mutation Stash moveFiles и передаёт для каждого выбранного видео:
- ID видеофайла;
destination_folder;destination_basename.
Перед запуском отображается рассчитанный будущий путь. Файлы обрабатываются по одному; ошибка одного файла не останавливает остальные.
Связанные файлы
Версия 0.3.2 не перемещает автоматически .srt, .vtt, .jpg и .png. Обрабатывается только явно выбранный видеофайл.
Выбор файлов
Чекбокс активен, если:
- у строки есть видеофайл;
- после применения сохранённых данных есть
Title; - можно определить расширение;
- файл находится внутри одного из настроенных Stash Library Paths;
- специальный путь для
Movie, если он нужен, находится внутри одного из Stash Library Paths.
Правила сравнения Title
Сохраняются правила v0.1.5:
- расширение файла отбрасывается;
- регистр игнорируется;
- пунктуация считается разделителем;
&иandэквивалентны;- апострофы игнорируются;
- диакритика игнорируется (
Qué=Que); - границы между буквами и цифрами разделяются (
DAY2026=Day 2026); - сравнение выполняется по последовательности целых слов;
- специальных fuzzy/Levenshtein-правил нет.
Поэтому остаются несовпадениями:
Asphyxxia≠Asphyxia;Angels≠Angles;Gina Valentina≠Gina Valentine;Step Daughter≠StepDaughter;De Ville≠DeVille.
Фильтры Studio
Только в пределах той же студии — показывает несовпадения Title, у которых Studio в имени файла совпадает с текущей Scene.studio. При сравнении Studio игнорируются регистр и пробелы, поэтому, например, AcademyPOV и Academy POV считаются одной студией.
Только с разными студиями — показывает несовпадения Title, у которых Studio в имени файла действительно отличается от текущей Scene.studio после нормализации регистра и пробелов.
Фильтры взаимоисключающие.
Переход по страницам
Между кнопками «← Назад» и «Вперёд →» есть выпадающий список для прямого перехода на конкретную страницу.
Установка / обновление
- Распакуйте ZIP.
- Замените файлы Filename Title Checker в каталоге
pluginsStash:filename-title-checker.ymlfilename-title-checker.jsfilename-title-checker.css
- В Stash откройте Settings → Plugins.
- Выполните Reload Plugins.
- Обновите страницу браузера.
- Откройте Filename Check.
Важно о сохранении GraphQL-результатов
Выбранные предпочтительные данные сейчас хранятся в localStorage браузера. Поэтому:
- они сохраняются после перезагрузки страницы;
- не требуют изменения конфигурации или базы Stash;
- относятся к конкретному браузеру/профилю;
- очистка данных сайта/Local Storage удалит сохранённые варианты.
В будущей версии при необходимости это можно перенести в постоянное хранилище Stash/плагина.
Безопасность
- API-ключи Stash-box остаются в конфигурации Stash;
- внешние источники вызываются через backend Stash;
- выбор GraphQL-результата сам по себе не меняет Scene;
- фактическое переименование выполняется только после отдельного выбора чекбоксом и подтверждения;
- физическое перемещение выполняет Stash через
moveFiles.
v0.4.0
Сохранить в Scene и переименоватьтеперь выполняет обе операции подряд: сначала записывает выбранные GraphQL-метаданные в Scene Stash, затем сразу вызывает штатныйmoveFilesдля соответствующего видеофайла.- Дополнительный чекбокс и запуск массового переименования после сохранения Scene больше не требуются.
- Если файл уже имеет рассчитанное имя/папку, операция считается успешной без лишнего
moveFiles. - После успеха скрывается только обработанная строка видео, без полной повторной проверки и без потери GraphQL-результатов других сцен.
- Если Scene сохранилась, но переименование файла завершилось ошибкой, строка остаётся на экране для ручного повтора.
v0.4.1
- Исправлено объединение
scene.stash_ids: новый ID выбранного GraphQL-источника теперь заменяет старый ID того же endpoint вместо добавления второй записи. - Это предотвращает нарушение уникального ограничения
scene_id + endpointв таблицеscene_stash_ids. - Stash IDs других GraphQL-источников при сохранении остаются без изменений.
More from Druidblack/stash-plugin
- Jellyfin SyncDirect Jellyfin sync for scenes with Jellyfin URLs; safe fallback search when a scene has no Jellyfin URL. Performer sync remains direct-URL-only. Syncs favorites, optional reliable Stash resume position, optional generated Jellyfin covers with configurable upload delay, local saving and manual re-upload task, performer Career Start/End metadata, and adds Open in Jellyfin / Generate cover buttons. Includes bulk cover generation and automatic cover directory exclusions.