Releases: Ucellar/Local_Booru
Release list
Local_Booru_windows v1.5
ENGLISH
Local Booru Changelog
v1.5 — first-run language picker and safer SQLite rebuilds
Release date: 2026-07-09
Added
- First-run language dialog for choosing English or Russian before the main window opens.
- Persistent language selection via the
languageandlanguage_selected_oncesettings keys. - English public README for GitHub publication.
- Russian companion documentation for users who prefer the Russian interface and release notes.
Fixed
- Fixed
m024_reverse_branch_statusmissingNAME, which could crash migration journaling after a clean SQLite database rebuild. - Migration runner now falls back to a safe generated migration name if a migration module misses
NAME, preventing a secondaryAttributeErrorfrom masking the real migration error. - Legacy NO_MATCH cache import and deleted-file registry import now commit in batches to avoid long SQLite writer locks during clean database rebuilds.
- Parser startup no longer treats a locked SQLite database as an empty database.
Improved
- Safer SQLite startup and readiness checks after abnormal shutdowns.
- Low-memory parser profile for large archive runs.
- Better release documentation for GitHub users.
v413 — first-run language picker
- Added a first-run startup dialog for choosing the interface language: Russian or English.
- The choice is saved into settings as
languageandlanguage_selected_once, so the dialog appears only once per workspace/profile. - The existing Settings page language switch remains available for later changes.
- Added Qt-free language bootstrap helpers and tests.
v412 — SQLite migration m024 / deleted-DB startup fix
- Fixed
m024_reverse_branch_statusmissingNAME, which crashed schema migration journaling after a database rebuild. - Migration runner now uses a safe fallback name, so a future migration without
NAMEno longer masks the real migration error. - Legacy NO_MATCH and deleted-registry imports now commit in batches to avoid holding SQLite writer locks for minutes during clean database rebuilds.
- This specifically targets the deleted-SQLite test path where the media archive remains intact but the working database is recreated.
v411 — DB lock hard-stop and low-RAM parser profile
- Parser startup no longer treats
database is lockedduring status/site-status checks as an empty database. If SQLite is still locked after crash recovery, the parser stops before queue construction. - Added a startup SQLite readiness probe: a read test plus a short
BEGIN IMMEDIATE/ rollback write-lock test before scanning and status queue construction. - Added runtime performance profiles:
auto,low_memory,balanced, andperformance. Auto resolves by detected RAM and only changes the worker session copy, notapp_settings.json. - The low-memory profile clamps the reverse admission window and worker count, disables pHash preflight for large runs, uses FILE temp store, applies a smaller SQLite cache, and sets RAM limits based on total system memory.
- Large-run local preflight is skipped on low-memory systems instead of warming pHash/video-frame caches over tens of thousands of files.
- Reverse scheduler stops advancing already-archived
skip_existingfiles to later stages after a branch returnsSKIP ARCHIVED.
v405 — audit hotfixes
- Fixed tests shipped in v404: tag-group merge expectations now match preserved first spelling.
- Removed an engine side effect from
core.taggerpackage import; helper modules can be imported without loading the full Tagger engine. - Made
imagehashoptional for hashing helper imports; pHash functions return a safe fallback when it is missing. - Removed the
save_settings()side effect from SQLiteconnect()/ensure_initialized(); database initialization now writes only a marker file. - Added startup handling for
DatabaseMissingErrorwith a clear dialog and exit code instead of silently continuing. - Parser database error handler now treats
DatabaseMissingErroras a hard safe-stop. - Fixed resumed reverse clean-state logic by counting only
_should_reverse()-eligible already-journaled files. - Added effective-category refresh after indexer tag rebuild, e621 metadata repair, and invariant repair.
- Replaced category-maintenance
URL LIKE '%host%'scan with indexedsources.hostmatching. - Release zip builder now runs pytest by default and has stronger nested-folder excludes.
- Added
ui/tagger/__init__.pyand PyInstaller hidden imports forui.tagger.workersand the new tagger helper modules. VACUUMno longer force-closes pooled SQLite connections owned by other threads.
v404 — full audit refactor
- First safe split of
core/tagger/engine.py: hashing, tag groups, cookie I/O, and ATF HTML helpers were moved into separate testable modules, whileengine.pyremains a compatibility facade. - Major split of
ui/tagger_page.py:TaggerWorkerandBrowserLoginWorkerwere moved intoui/tagger/workers.py, leaving the page as a UI layer. - SQLite schema v23: added materialized
image_effective_tag_categorytable to speed up all-source tag facets; storage now refreshes the cache when tags or categories change. - DONE / clean-session logic is stricter: runs with errors, deferred items, or reverse retry rows are no longer marked clean.
- Release hygiene:
AI_MEMORYwas renamed to dev-only, old changelogs were consolidated,tools/release/make_release_zip.pywas added, and release exclude rules were added. reactor_scraperand architecture leftovers were moved intotools/deprecatedwith compatibility shims.- Added initial pytest smoke tests for helpers and release excludes.
v403 — safety/reverse/UI audit patch
- SQLite safety guard: a previously initialized database is not silently recreated as an empty file when the expected
local_booru_index.sqlite3is missing. Intentional full reset: createALLOW_CREATE_EMPTY_DB.txtbeside the expected database or launch withLOCAL_BOORU_ALLOW_NEW_DB=1. - Startup log moved from the app directory to
Local_Booru_Archive/settings/output/logs/startup_console.log. - Browser companion GET endpoints now require the same extension origin/header authorization as POST; extension status fetch was updated accordingly.
- Reverse temporary network defer is persisted into
reverse_retry_queueinstead of remaining only in RAM. - e621 IQDB 429/temporary failures set a branch-local cooldown and retry row; the whole parser is not stopped.
- Reverse branch claim/cancel: when a file is already found by another branch, pending sibling branches skip it and the summary reports
REVERSE_CANCELED. - Summary now reports
REVERSE_RETRY_QUEUED. - Gallery/grabber source sidebars: collapsed view shows all + top 3 sources by count; expanded view shows all. No configurable sorting.
- r34 theme made more angular: gallery cards/containers in that theme no longer use rounded corners.
- Library diagnostics now includes source folder vs
site_scan_statusreconciliation. - Added safe SQLite identifier validation for maintenance/count helper SQL.
v399 — parser recovery uses latest completed files
- Fixed the “recheck last 10 files” recovery logic.
- Previous builds tracked files when they were submitted/started, so with a large conveyor window the recovery pass could recheck the first/oldest files in the queue.
- Recovery now tracks
completed_recent: the last files that actually finished parser processing. - On an unclean shutdown, the next parser run forces recheck for those latest completed files first.
recent_startedis kept only as a compatibility fallback for old recovery state files.
v396 — general-only category maintenance
- Added a button in Settings → Library Maintenance: “Reclassify general-only tags”.
- The button finds already saved Gelbooru/rule34/xbooru/hypnohub source bundles where all source-specific tags are still under
general. - Starts a network category recheck using the already confirmed source URL.
- No new tags are added: only categories for existing tags in that specific source bundle are updated.
- A SQLite backup is created before the bulk update.
- The repair runs in the background through TaskManager, with progress shown in the maintenance status.
v395 — current-run category drain
- Gelbooru/rule34 category background now prioritizes jobs created by the current parser run.
- The live parser no longer loads the full historical category-backfill backlog into RAM at startup by default. Old backlog can still be enabled explicitly with
tagger_category_startup_seed_backlog=true. - Before DONE, parser waits for current-run category jobs to finish, so freshly matched Gelbooru/rule34 posts do not remain visibly stuck in
general. - Added task accounting for category queue shutdown.
v394 — Gelbooru category backfill fix
- Gelbooru source-specific tag view should no longer remain entirely under
generalwhen post DAPI returned flat tags. - Background tag category queue key bumped to
flat-sites::tag-groups-v8-gelbooru-rule34-dapi-overlayto re-run old Gelbooru/rule34 category jobs. - Gelbooru category recovery now tries the tag catalogue per tag when the multi-name DAPI batch does not classify the confirmed post tags.
- Membership remains guarded: Gelbooru HTML/tag-catalogue may only classify tags already present in the exact Gelbooru post response; it cannot add sidebar/recommendation tags.
v391 — embedded ExifTool bootstrap
- Added built-in ExifTool lookup locations:
<app>/tools/exiftool/exiftool.exe<app>/tools/exiftool/exiftool_files/Local_Booru_Archive/settings/tools/exiftool/exiftool.exe
- Added automatic Windows bootstrap for ExifTool when it is missing:
- downloads the official 64-bit ExifTool archive into
settings/tools/exiftool - extracts
exiftool.exeandexiftool_files...
- downloads the official 64-bit ExifTool archive into
Local_Booru_windows v1.4
Local Booru v1.4
Краткое описание изменений относительно v1.3.
Добавлено
- Blueprint-парсер — визуальная схема парсера с блоками, соединениями, пресетами, настройками workers/delay/retry/rate group и режимом полного доступа.
- Unreal-style Blueprint canvas — тёмный холст с сеткой, цветными блоками, портами, проводами, группами и почти бесконечной рабочей областью.
- Свободное дерево интерфейса — страницы приложения можно вкладывать друг в друга и менять порядок, например “Дубли” внутри “Обзор” или “Граббер” внутри “Манга”.
- Async reverse side queue — reverse-поиск вынесен в отдельную очередь и больше не должен тормозить основной MD5-конвейер.
- Per-site checkpoints — приложение запоминает, какие сайты уже проверены для каждого файла, и при повторном запуске проверяет только незавершённые источники.
- SQLite recovery/write gate — после падения или ошибки диска запись в SQLite временно блокируется до фоновой проверки базы.
- Power-loss recovery — после аварийного завершения последние обработанные файлы перепроверяются, чтобы не оставлять битые состояния.
- e621 browser companion / page-context fetch — добавлен запасной способ API-запросов через контекст браузерной вкладки.
- rule34 image-key relay — добавлена side-ветка для 40hex image-key: image-key → пост → MD5 → проверка по сайтам.
- ATF pixel_hash locator — добавлен поиск ATF через
media_assets.jsonпо pixel_hash с переходом к MD5 и посту. - Source/Post URL → MD5 relay — ссылки из SauceNAO/TinEye/IQDB/source-результатов могут превращаться в MD5 и прогоняться через обычные MD5-сайты.
- Официальные/API-first клиенты — переработаны клиенты e621, Danbooru, rule34.xxx и ATF.
- MD5 в статусе парсера — в таблицу текущих задач добавлена колонка MD5.
- FHD-режим интерфейса — Blueprint и панели уплотнены для 1920×1080.
Изменено
- Парсер стал модульным — стандартный конвейер теперь описывается Blueprint-схемой, а не только жёсткой последовательностью в коде.
- MD5-конвейер отделён от медленных fallback-веток — быстрые exact-MD5 проверки идут отдельно от IQDB/SauceNAO/TinEye/rule34 image-key.
- Reverse запускается только после MD5 miss — обратный поиск используется как запасной путь, а не мешает основному поиску.
- Отключатели парсера стали главнее Blueprint — если модуль выключен в настройках, Blueprint больше не включает его обратно без явного override.
- TinEye используется только как locator — он не является источником тегов, а только даёт ссылки, которые можно попытаться превратить в MD5.
- rule34.xxx переведён на DAPI-first — теги и совпадения берутся через API; HTML используется только как ограниченный вспомогательный overlay.
- ATF переведён на API-first — основной путь работает через Danbooru-compatible API и обработку anti-bot/PoW.
- e621 переведён на более устойчивый API-путь — с cookie, companion fallback и отдельной обработкой IQDB.
- FOUND/NO_MATCH логика стала безопаснее — найденный файл не должен оставаться в старом NO_MATCH-состоянии.
- Поведение при повторном запуске изменено — завершённые сайты не гоняются повторно без необходимости.
- Интерфейс Blueprint переработан — панели можно переносить, группировать как вкладки и откреплять в отдельные окна.
- Логи стали подробнее — отдельно видны MD5-проверки, reverse, relay, exact merge, network temporary failure и slow fallback.
Исправлено
- Reverse блокировал основной парсер — исправлено: MD5-конвейер продолжает работу, пока reverse обрабатывает свою очередь.
- TinEye запускался при выключенном модуле — исправлено: Blueprint уважает выключатели парсера.
- Отключённые сайты могли оставаться активными через Blueprint — исправлено.
- Создание физических копий одного MD5 — исправлено: источники и теги объединяются в существующую карточку.
- NO_MATCH мог перебить найденный файл — исправлено через promotion/stale cleanup.
- Ошибки после bad shutdown / disk I/O — добавлена защита записи и ожидание проверки SQLite.
- Повторная обработка завершённых сайтов — исправлено через per-site journal и pending-only resume.
- Падение Blueprint из-за
reload_graph_view— исправлено. - Падение Blueprint из-за
setTabDataу QTabWidget — исправлено. - Маленькая рабочая область Blueprint — исправлено: холст расширен и автоматически растёт.
- Блоки Blueprint были свалены в кучу — стандартная раскладка разнесена шире.
- Плохой вид на Full HD — интерфейс уплотнён для 1920×1080.
- rule34 image-key тормозил MD5-путь — вынесен в side queue.
- ATF мог уходить в HTML/PoW вместо нормального API-пути — добавлена обработка API/cookie/PoW.
- e621 мог ломаться на Cloudflare/доступе — добавлен browser companion fallback.
- Сетевые временные ошибки могли выглядеть как окончательный NO_MATCH — теперь такие файлы откладываются как incomplete/deferred.
- Непонятное состояние “SITES UP TO DATE” — частично улучшена диагностика; основной смысл: сайты уже проверены, файл может идти в reverse.
Удалено
- Дублирующие кнопки Blueprint — убраны лишние действия вроде отдельной кнопки “Разложить красиво” и дублирующей загрузки стандартного плана при наличии пресетов.
- Старые небезопасные HTML-пути как основной источник совпадений — заменены API-first логикой там, где это возможно.
- Лишние физические копии при exact-MD5 совпадении — больше не создаются как штатное поведение.
Важно при обновлении
- Перед обновлением желательно сделать резервную копию SQLite и папки
settings. - После обновления не рекомендуется открывать новую базу в старой версии v1.3.
- После первого запуска приложение может выполнить фоновую проверку SQLite, особенно если прошлое завершение было аварийным.
- Для проверки новой async-логики в логах должна быть строка
reverse side queue async.
Local_Booru_windows v1.3
Хранилище файлов и целостность библиотеки
Единая карточка по MD5 — введено правило хранения: один MD5 соответствует одному физическому файлу и одной карточке с несколькими источниками.
Объединение источников — если один и тот же файл находится через несколько подключённых booru-источников, приложение больше не создаёт физические копии, а объединяет ссылки и теги в существующей записи.
Нормализация старых дублей — добавлена автоматическая обработка уже существующих точных MD5-дублей с переносом метаданных в одну карточку и отправкой лишних физических копий в корзину.
Защита основного архива — исходный архив переведён в режим только для чтения. Приложение может копировать из него файлы, но не удаляет, не перемещает и не перезаписывает оригиналы.
Рабочая библиотека — галерея, SQLite, кэш и корзина отделены от исходного архива и могут безопасно пересоздаваться во время тестирования или восстановления.
Безопасные файловые операции — копирование, удаление, восстановление, очистка и склейка точных копий переведены через единый слой хранения медиа.
Защита от перезаписи — если в рабочей библиотеке уже существует другой файл с тем же именем, новый файл получает уникальное имя вместо перезаписи существующего.
SQLite и метаданные
SQLite-first модель — живое состояние библиотеки переведено в SQLite: теги, источники, брак, очереди повторов, удалённые MD5 и состояния фоновых сервисов теперь хранятся в базе.
Отказ от sidecar в рабочем режиме — .tags.txt, .sources.txt и marker-файлы больше не используются как действующее хранилище метаданных.
Импорт старых метаданных — для прежних библиотек оставлена отдельная операция импорта sidecar-файлов в SQLite с созданием резервной копии базы.
NO MATCH в SQLite — состояние ненайденных файлов больше не требует создания вспом состояние ненайденных файлов больше не требует создания вспомогательных marker-файлов рядом с изображениями.
Редактирование карточек — изменения тегов и источников из просмотрщика теперь записываются непосредственно в SQLite.
Миграции и обслуживание базы
Миграции SQLite — добавлен механизм нумерованных миграций с журналом применённых изменений и контролем версии схемы.
Версия схемы — структура базы обновлена до SQLite v14.
Проверка при запуске — целостность базы проверяется до начала операций записи.
Безопасный режим — при обнаружении повреждения SQLite операции записи блокируются, а решение о восстановлении остаётся за пользователем.
Панель обслуживания — добавлены создание backup, статистика SQLite и безопасное сжатие базы при остановленном парсере.
Реестр удалённых MD5 — перенесён в SQLite и теперь различает ручное удаление пользователем и автоматическую уборку точных копий.
Корректная политика возврата — автоматически удалённая точная копия больше не блокирует повторное добавление полезного файла в библиотеку.
Корзина и восстановление
Безопасное восстановление — если точная копия файла уже существует в галерее, второй физический файл не восстанавливается, а теги и источники объединяются с существующей карточкой.
Сохранение метаданных — удаление и восстановление точных копий больше не приводят к потере дополнительных источников или тегов.
Ремонт библиотеки — операции склейки дублей и обслуживания данных выполняются с предварительным созданием резервной копии базы.
Парсер и запасной поиск
Возобновление очередей — очередь SauceNAO сохраняется между перезапусками приложения и автоматически продолжает работу после окончания кулдауна.
Состояние кулдауна — время ожидания SauceNAO и история повторных попыток перенесены в SQLite.
Защита от повторной обработки — IQDB и уже завершённые этапы поиска не запускаются повторно для файлов, ожидающих повторной проверки через SauceNAO.
Фоновая раскладка тегов — добавлена операция возврата устаревших задач категоризации обратно в очередь без повторного основного поиска.
Понятные журналы — реальные добавления нового источника к существующей MD5-карточке фиксируются отдельным событием, а устаревшие сообщения о marker-файлах заменены на состояние SQLite.
Диагностика и безопасность
Страница диагностики — добавлен отдельный read-only раздел для проверки состояния библиотеки без автоматического изменения данных.
Аудит библиотеки — диагностика показывает количество живых файлов, содержимое корзины, точные MD5-дубли, файлы без тегов и источников, карточки с несколькими источниками, незавершённые проверки, фоновые очереди, состояние индексов SQLite, ошибки и медленные операции.
Защита оригиналов — диагностика показывает путь исходного архива, путь рабочей библиотеки и журнал заблокированных попыток изменения оригинальных файлов.
Экспорт отчёта — добавлено сохранение диагностического отчёта в JSON.
Отчёты об ошибках — добавлены журнал падений приложения и журнал медленных операций.
Обезличивание журналов — исправлена утечка API-ключей, токенов и авторизационных параметров в логах и диагностических архивах.
Очистка старых логов — из интерфейса можно обезличить уже созданные журналы с потенциально чувствительными параметрами.
Галерея и производительность
Исправление пустой галереи — устранена ошибка, при которой SQLite содержала живые файлы и корректные счётчики, но сетка карточек оставалась пустой.
Загрузка карточек — добавлены видимые placeholders на время построения миниатюр или при ошибке генерации превью.
Ошибки превью — сбои создания миниатюр теперь записываются в журнал вместо молчаливого пустого экрана.
Фоновые счётчики — тяжёлые подсчёты тегов и источников загружаются в фоне и больше не должны подвешивать интерфейс при открытии страниц.
Профилирование SQLite — через диагностику можно выполнить замер скорости основных запросов библиотеки.
Настройки превью — добавлены параметры качества миниатюр, лимита кэша, количества потоков загрузки и предзагрузки соседних страниц.
Интерфейс и настройки
Структура настроек — параметры переработаны в горизонтальные подразделы с закреплённой нижней панелью действий.
Постоянные действия — кнопки сохранения настроек, инструкции и списка изменений больше не перемещаются вместе с содержимым вкладок.
Настройка бокового меню — разделы интерфейса можно менять местами перетаскиванием мышью.
Дополнительные разделы — добавлена сворачиваемая группа для редко используемых вкладок.
Безопасный drag-and-drop — исправлена ошибка, из-за которой пункт бокового меню мог исчезнуть при переносе.
Группы тегов — порядок и цвета категорий тегов теперь настраиваются перетаскиванием.
Единый стиль элементов — чекбоксы приведены к единому визуальному оформлению без системных символов поверх пользовательского дизайна.
Предпросмотр парсера — отображение разделено на облегчённый одиночный preview и полный список состояния источников без дублирования панелей.
Исправлено
Точные дубли — устранено создание нескольких физических копий одного файла при наличии нескольких источников.
Потеря метаданных — исправлена потеря дополнительных источников и тегов при удалении или восстановлении точной копии.
Ошибочная блокировка MD5 — автоматическая уборка дубля больше не запрещает повторное добавление полезного файла.
Повторная обработка после перезапуска — завершённые этапы поиска больше не запускаются повторно без необходимости.
Счётчик общего количества — исправлен подсчёт all, который раньше суммировал совпадения источников вместо уникальных файлов.
Избранное — исправлен фильтр, из-за которого избранные файлы отображались только на своей прежней странице, а остальные страницы оставались пустыми.
Страница тегов — устранена повторная тяжёлая загрузка при каждом открытии.
Отображение галереи — исправлена пустая сетка карточек при наличии корректных данных в SQLite.
Защита исходного архива — закрыты старые пути удаления и восстановления, которые потенциально могли затронуть оригинальные файлы.
Безопасность логов — устранено попадание приватных параметров авторизации в журналы ошибок и диагностические отчёты.
Порядок разделов — устранена потеря пунктов бокового меню при переносе мышью.
Важно при обновлении
Исходный архив используется только как источник для копирования и не должен изменяться приложением.
Рабочую библиотеку и SQLite можно пересоздать из исходного архива при необходимости.
После обновления схемы базы не рекомендуется открывать ту же SQLite в старых версиях приложения.
Перед операциями ремонта и обслуживания создаётся резервная копия базы.
Local_Booru_windows v1.2
Обновлено:
Галерея — новый GalleryCardDelegate рисует рамку только вокруг реального изображения, не вокруг всей ячейки. Портретные и пейзажные картинки больше не обрезаются и не растягиваются
Галерея — миниатюры запрашиваются в 2x разрешении для чёткости на больших экранах и high-DPI
Подписки — автодополнение тегов в поле запроса (берёт теги из библиотеки)
Подписки — таблица расширена до 6 колонок, улучшенные подсказки
Манга — кнопка "Обновить", фильтр и сортировка в панели манги
Темы — добавлены r34 и r34dark цветовые схемы
Иконки — новые: add, delete, save, cookie, login, login_all (light/dark варианты)
Пофикшено:
Галерея — ячейки больше не мигают при загрузке (фон прозрачный пока грузится миниатюра)
Подписки — поле запроса использует тот же виджет с автодополнением что и галерея
Тэги — мелкие правки нормализации
Local_Booru_windows v1.1
-кратко
починил:
темы
парсер некоторых сайтов (брались не нужные посты или те которых не существовало)
некоторые баги интерфейса
-добавил:
чуток оптимизации (я блять тестить не успеваю так что может что-то сломалось)
темы (или одну тему я не помню уже)
все что вспомнил и самое критичное добавил остальное не помню
есть некоторые баги в темах и интерфейсе впринцепе стараюсь починить (некогда не используйте claude для создания тем в интерфейсе который написал он сам же будете потом отмываться от того ушата говна который он навалит)
наделе это не v1.1 а где-то 250-270 версия
Local_Booru_windows
Local_booru_windows_x64 — сборка с EXE для людей, у которых нет Python для запуска исходного кода.
Не кидайтесь помидорами. Писалось через ИИ, а именно ChatGPT и Claude Sonnet 4.6. Я отполировал всё, насколько смог, чтобы программой можно было пользоваться без критических багов.
Программа создавалась как более простой и автоматизированный аналог Hydrus Network для ленивых и не желающих разбираться в перегруженном интерфейсе.
Local Booru создавался именно для Booru-сайтов, а не как универсальная замена Hydrus.
Я в кодинге полный 0. Считайте, это моя первая программа. Делал в первую очередь для себя, но решил залить на GitHub — может, кому-нибудь тоже пригодится.
Буду стараться обновлять проект и постепенно улучшать его.