Skip to content

Repository files navigation

🏷️ Tag Manager

Русский English

Генерация и правка гибридных подписей (booru-теги + описание естественным языком) для датасетов обучения LoRA — локально, через ваши vision-модели.

Python Streamlit License: MIT

Генерация подписей
Главный экран

Ещё скриншоты
Вкладка «Теги»
массовые правки датасета
Вкладка Теги
Вкладка «Галерея»
просмотр и правка
Вкладка Галерея
Вкладка «Здоровье»
аудит датасета перед обучением
Вкладка Здоровье
Сайдбар
настройки API и генерации
Настройки API

Зачем

Чтобы обучить LoRA или файнтюн, рядом с каждой картинкой нужен текстовый файл с описанием: cat.jpgcat.txt. На сотнях изображений писать это руками — долгий монотонный вечер.

Tag Manager создаёт подписи за вас: показываете ему папку — он прогоняет её через локальную vision-модель и пишет капшены по вашему промпту. Когда датасет готов, те же файлы можно массово отредактировать: поправить теги, добавить триггер-слово, пройтись по галерее.

Работает полностью локально. Достаточно поднять свою vision-модель с OpenAI-совместимым API.

Возможности

  • Генерация подписей через локальную VLM (OpenAI-совместимый API)
  • Гибридный формат: booru-теги + описание естественным языком
  • Безопасное обновление уже готовых капшенов (дополнить / перегенерить + мёрж, защита ручных правок)
  • Массовое редактирование и чистка тегов (дубли, пробелы, регистр) — с предпросмотром и бэкапом .bak
  • Стоп-лист тегов: автоудаление нежелательных тегов при генерации и массовое применение к датасету
  • Триггер-слово во всём датасете разом
  • Галерея с поиском по тегу, ручной правкой, перегенерацией выбранных и удалением
  • Аудит датасета перед обучением: битые файлы, дубли, сироты, проблемные капшены
  • История массовых операций с откатом последнего действия
  • Экспорт dataset-конфига для тренера (OneTrainer JSON / kohya TOML)
  • ETA и скорость генерации, браузерное уведомление по завершении
  • Пауза и докачка на долгих прогонах

Почему не WD14

WD14 генерирует только booru-теги. Некоторые современные модели (например Anima) лучше работают на смешанных подписях: теги + описание естественным языком. Tag Manager позволяет получать такие подписи через VLM и затем удобно их редактировать.

Что нужно

  • Python 3.10+
  • Запущенный сервер с vision-моделью и OpenAI-совместимым API. Проверено с oobabooga и llama.cpp. Подойдёт любая мультимодальная модель: Gemma (MoE), Qwen2.5-VL, LLaVA, Pixtral, MiniCPM-V, Llama 3.2 Vision — что выбрать, см. FAQ.

Модель вы запускаете сами — например, в oobabooga на вкладке Model. Tag Manager её не грузит: просто подключается к уже работающему OpenAI-совместимому API. Обычная текстовая модель не подойдёт — она проигнорирует изображение. Если вы вообще не запускали локальные модели — начните с FAQ, там всё расписано по шагам.

Установка

git clone https://github.com/OrcPoin/tag-manager.git
cd tag-manager
pip install -r requirements.txt
streamlit run app.py

На Windows можно вместо последней команды дважды кликнуть run.bat. Обновиться до свежей версии — двойной клик по update.bat (нужен установленный git).

Как пользоваться

  1. В сайдбаре укажите адрес API (например http://127.0.0.1:5000/v1) и имя модели, нажмите «Проверить соединение».
  2. Выберите папку с картинками, режим обработки и промпт (есть готовые пресеты).
  3. При желании задайте триггер-слово — оно встанет первой строкой каждого .txt.
  4. Нажмите «Запустить».

Генерация идёт в фоне, поэтому интерфейс не виснет даже на долгих прогонах: обработку можно поставить на паузу и править капшены вручную. Прогресс пишется в progress.json — можно прервать и продолжить позже; в режиме докачки приложение доделает только незавершённые файлы.

Когда датасет готов, вкладки «Теги» и «Галерея» дают навести порядок: посмотреть частоты тегов, массово поправить их (с предпросмотром и .bak), проставить триггер, пробежать по галерее с поиском по тегу. Правки трогают только тег-строки — проза и скобочные блоки персонажей не портятся. Перед самим обучением вкладка «Здоровье» покажет битые файлы, дубли, сироты и слабые капшены, а лишнее уберёт в карантин.

Формат капшена

Формат задаёте вы промптом. Дефолтный пресет даёт гибрид «теги + проза», удобный для style-LoRA:

1girl, blue hair, smile, school uniform, outdoors, day

A medium shot with the subject centered.

(blue hair, on the left: she waves at the viewer, smiling.)

Такой формат хорошо подходит для моделей, понимающих одновременно booru-теги и описание сцены.

Массовые операции понимают этот формат и правят только строку тегов, не задевая прозу.

FAQ

Не запускал локальные модели. С чего начать?

Tag Manager сам модель не запускает — он подключается к уже работающему серверу. Поэтому сначала поднимаете сервер с vision-моделью, потом вписываете его адрес в сайдбар.

Нужны три вещи:

  • Сервер — держит модель в памяти и отвечает по сети. Либо llama-server из llama.cpp (запуск из консоли), либо oobabooga (всё мышкой). Новичку проще oobabooga.
  • Файлы модели — для vision-моделей обычно два GGUF: сама модель и mmproj-*.gguf («глаза» модели). Подробнее — в пункте про mmproj.
  • Адрес API — сервер слушает порт, например http://127.0.0.1:5000/v1. Этот адрес и вписываете, потом жмёте «Проверить соединение».

Дальше — инструкции для oobabooga и llama.cpp ниже, выбор модели — там же.

Запуск через oobabooga (проще для новичка)

Модель грузится и настраивается мышкой, MoE и mmproj подхватываются сами.

  1. Установите oobabooga по инструкции (есть установщик в один клик для Windows).
  2. Положите файлы модели в text-generation-webui/models/ — саму модель и mmproj-*.gguf рядом.
  3. Вкладка Model → выберите модель → Load.
  4. Включите API: вкладка Session → галочка openai (или запуск с --api). Порт по умолчанию — 5000.
  5. В сайдбаре Tag Manager впишите http://127.0.0.1:5000/v1 и нажмите «Проверить соединение». Имя модели подтянет кнопка 🔄.
Запуск через llama.cpp (один бинарник)

Легче по ресурсам, но модель и её «глаза» подключаете сами в командной строке. Скачайте llama.cpp, GGUF модели и её mmproj-*.gguf, затем:

llama-server -m model.gguf --mmproj mmproj-model.gguf --port 5000 -ngl 99
  • --mmproj — файл-проектор для vision. Без него картинки не работают (см. пункт про mmproj).
  • --port 5000 — порт, его же вписываете в Tag Manager как .../5000/v1.
  • -ngl 99 — слоёв на видеокарту (99 = всё; уменьшите, если не хватает VRAM).
Что такое mmproj.gguf и зачем он нужен?

Без него vision-модель не видит картинки — это самая частая причина, почему «ничего не работает».

Мультимодальная GGUF-модель — это обычно два файла: сама модель (model.gguf) и отдельный проектор зрения mmproj-*.gguf. Лежат они в одной репе на HuggingFace, но качать надо оба. Скачаете только основной — модель запустится как текстовая и картинки проигнорирует.

  • В llama.cpp проектор подключается флагом --mmproj mmproj-model.gguf.
  • В oobabooga достаточно положить mmproj-*.gguf в папку с моделью — подхватится сам.
Какую модель выбрать?

Нужна мультимодальная (vision) модель — текстовая проигнорирует картинку.

Сам использую Gemma в MoE-версии (gemma-4-26B-A4B-it-UD-Q4_K_M.gguf) для качественных описаний на английском. MoE (Mixture of Experts) значит, что из 26B параметров на каждый токен работает лишь часть — по скорости и аппетиту к VRAM модель ближе к маленькой, а по качеству к большой. В oobabooga MoE настраивается автоматически; в llama.cpp хватает обычной команды запуска.

Если нужны только теги, без описания — берите WD14, а не VLM (см. «Почему не WD14»). Сила Tag Manager — в связке «теги + проза».

Альтернативы, если Gemma не подошла:

  • Qwen2.5-VL — очень детальная, читает текст на картинке, размеры 3B/7B/72B. Плотная (не MoE), крупные версии тяжелее для VRAM.
  • MiniCPM-V — лёгкая и быстрая, для слабых машин; на сложных сценах уступает.
  • Pixtral — хорошо «понимает сцену» целиком, но прожорлива по памяти.
  • LLaVA — классика с кучей гайдов, но постарше и слабее в деталях.
  • Llama 3.2 Vision — стабильная, средняя по детальности тегов.

Берите столько параметров, сколько влезает в VRAM с запасом. И mmproj нужен для конкретной модели свой.

Какие режимы обработки бывают?

В выпадающем списке «Режим обработки» на вкладке генерации:

  • Докачать — пропустить то, что уже сделано этим приложением (по реестру). Безопасный дефолт: чужие старые .txt не считаются «готовыми».
  • Все файлы — перезаписать всё заново.
  • Только без капшенов — обработать файлы, у которых вообще нет .txt.
  • Пропускать по дате — пропустить, если .txt новее картинки.
  • Обновить существующие — умный повторный прогон, см. следующий пункт.
Как работает режим «Обновить существующие»?

Режим для доработки уже готовых капшенов без потери ручных правок. Можно запускать повторно — если ничего не изменилось, файлы не будут перезаписаны.

Механизм — как получить новый текст:

  • Дополнить существующий — модель видит картинку И старый капшен, отвечает только недостающим/неверным. Быстрее и дешевле, хорош для дополнения тегов.
  • Полная регенерация + мёрж — модель генерит капшен с нуля, затем приложение автоматически сливает старый и новый по стратегиям ниже.

Стратегия тегов — что делать с тег-строкой:

  • Добавить недостающие — к старым тегам дописываются те, что есть в новом капшене, но отсутствуют в старом. Дубли не появятся.
  • Заменить теги новыми — тег-строка берётся целиком из нового капшена.
  • Оставить старые теги — теги не трогаются.

Стратегия прозы — что делать с описательными блоками (COMPOSITION / CHARACTERS и т.д.):

  • Сохранить старую прозу — проза остаётся как есть (безопасный дефолт).
  • Взять новую прозу — проза заменяется из нового капшена.

Политика ручных правок — если вы редактировали .txt вручную после генерации:

  • Не трогать — файл пропускается целиком (дефолт).
  • Только дополнить теги — дописать недостающие теги, прозу не менять.
  • Отложить на ручной просмотр — файл попадёт в список для проверки.
  • Обновлять как обычно — правки не защищены.

Фильтры — какие файлы вообще попадают в обновление:

  • Устаревший промпт — капшен сделан другим промптом, чем текущий.
  • Сменилась модель — капшен сделан другой моделью.
  • Плохое качество — капшен не проходит проверку качества.
  • Все файлы — обновить всё, что имеет .txt.

Перед записью рядом с каждым файлом создаётся .bak.

Генерация идёт 8–10 минут — это нормально?

Для thinking-моделей на сложных сценах — да. Таймаут и Max tokens в config.py подняты с запасом, чтобы длинный, но корректный анализ не обрывался. Простые картинки — быстрее.

Испортил теги массовой правкой. Как откатить?

Перед каждой массовой операцией рядом с файлом создаётся .bak. Вкладка «Теги» → под-вкладка «История» — там список последних операций и кнопка «Откатить последнюю», которая вернёт .txt из бэкапа. Если после операции был ещё один прогон — .bak перезаписан и откат невозможен.

Что такое стоп-лист тегов?

Файл stoplist.txt (один тег на строку, # = комментарий). Теги из стоп-листа автоматически удаляются из каждого капшена при генерации. Можно также применить стоп-лист к уже готовому датасету массово (вкладка «Теги»). Редактируется в сайдбаре.

Где хранятся настройки и пресеты?

В папке приложения: settings.json, presets.json, лог — processing_log.txt. Все локальные, в репозиторий не попадают.

Лицензия

MIT © OrcPoin

About

Captioning tool for LoRA training datasets. Local Streamlit app + OpenAI-compatible vision LLM.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages