# План: MEDIUM-волна №1 — удаление фона, размытие, резкость + Web Worker > **СТАТУС: ВЫПОЛНЕН 2026-08-23.** ## 1. Зачем - Первые операции настоящего алгоритмического уровня: свёртки и заливка связной области. - Витринная фича каталога — удаление однотонного фона без нейросетей: порог по цвету + заливка от краёв изображения + сглаживание границы маски. - Эти операции реально блокируют UI-поток на больших картинках — повод включить давно подготовленный путь: исполнитель `executeStep` переезжает в Web Worker, страницы не меняются вовсе. ## 2. Инструменты — 3 - **Удалить фон PNG** (`remove-background-png`, категория «Прозрачность») — параметры: цвет фона, допуск похожести %, режим «только внешние области» (заливка от краёв вместо глобального совпадения), сглаживание границы (проходы мажоритарного фильтра маски). Даёт превью маски через существующий контракт `preview`. - **Размытие PNG** (`blur-png`, новая категория «Фильтры») — гауссово приближение тремя проходами разделяемого бокса; радиус слайдером 1–32 px. - **Резкость PNG** (`sharpen-png`, «Фильтры») — свёртка ядром резкости с регулируемой силой (смесь исходного и обработанного), сила слайдером 0–100 %. ## 3. Новое ядро (чистые функции, детерминированные, покрытые тестами) - `core/convolution.ts` - универсальная свёртка с клампом краёв; - разделяемый бокс-блюр и сборка гауссова приближения из трёх проходов; - ядро резкости и смешивание с оригиналом по силе. - `core/background.ts` - построение маски удаления по цветовому расстоянию (та же метрика, что у удаления цвета); - заливка связной области от всех граничных пикселей (очередь, без рекурсии); - мажоритарное сглаживание маски заданным числом проходов; - сборка результата: альфа 0 у удалённых пикселей; плюс функция маски для превью. ## 4. Web Worker - Точка исполнения одна — `tools/executor.ts`; меняется только её внутренность. - Воркер-файл импортирует реестр и исполняет операцию по `toolId`; картинка приходит копией (структурный клон), результат возвращается передаваемым буфером. - Ленивая инициализация воркера при первом вызове; если воркер недоступен (старый браузер/тестовая среда) — автоматический откат на прямое исполнение в главном потоке. Обе ветви обязаны давать побайтово одинаковый результат. - Генераторы и текстовые представления остаются в главном потоке — они мгновенные. - Пипетка и лупа работают с уже готовыми картинками и не зависят от переноса. ## 5. Этапы и проверки - **A. Ядро** — свёртки и фон с тестами на малых матрицах (точные ожидания руками). Проверка: `pnpm test/check`. - **B. Реестр** — категория «Фильтры», три записи, превью маски. Проверка: тесты целостности, визуально. - **C. Web Worker** — перенос исполнителя, отккат-ветвь. Проверка: результаты до/после переключения идентичны байт-в-байт на фиксированной картинке и параметрах; `test/build` зелёные. - **D. Итог** — полный прогон и смоук §8. ## 6. Смоук-чеклист 1. Размытие: радиус 1 и 32 — плавно усиливается, прозрачные края не темнеют. 2. Резкость: сила 0 не меняет картинку; сила 100 заметно подчёркивает края без цветового мусора. 3. Удаление фона на логотипе с однотонным фоном: фон исчез, содержимое цело. 4. Режим «только внешние области»: дырка внутри объекта того же цвета остаётся непрозрачной. 5. Сглаживание 0/2/4 прохода — граница от жёсткой к мягкой, результат воспроизводим. 6. Превью маски показывает белым удаляемую область; скачивание всегда отдаёт результат. 7. Во время размытия большой картинки интерфейс остаётся отзывчивым (чип «Пересчёт…», скролл живой). 8. Цепочка: размытие → резкость → удаление фона работает; каждый блок скачивает свой промежуток. 9. Регресс старых инструментов и главной-поиска без изменений поведения. ## 7. Критерии готовности - Три новых инструмента проходят смоук §6; операции ядра покрыты точными юнит-тестами. - Исполнение изображений идёт через воркер там, где он доступен, с гарантированно одинаковым результатом обеих ветвей. - `test/check/build` зелёные. ## 8. Что сознательно не делаем - Многопроходное гауссово ядро «по-настоящему» (O(r²)) — трёхпроходного боксового приближения достаточно визуально и оно быстрее. - Хромакей по нескольким цветам, ИИ-сегментация — следующие волны. - Отмена выполняющегося прогона воркера — устаревшие результаты отбрасываются токеном, сама работа завершается фоном.