ChaiNNer

ChaiNNer позволяет собирать визуальные цепочки для нейросетевого увеличения и восстановления изображений, пакетной обработки папок, преобразования цветов и размеров, работы с прозрачностью, текстурами, спрайтами и кадрами видео: вместо последовательности ручных команд пользователь соединяет на схеме узлы загрузки, модели, фильтров, условий, итераторов и сохранения и запускает весь граф одной кнопкой.

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

Особенно полезен ChaiNNer там, где нужно повторять одинаковую последовательность действий над десятками или сотнями файлов. Итераторы читают изображения, модели или кадры видео по очереди, а имя, путь, индекс, размер и другие значения можно использовать дальше в графе для условий и автоматического формирования имен. При этом набор нейросетевых возможностей зависит от выбранного вычислительного фреймворка и загруженной модели, поэтому качество и скорость определяются не одной кнопкой программы, а всей конфигурацией цепочки.

Скачать ChaiNNer

Оценка 9.7Рекомендуем
  • Конвертация видео
  • Сжатие файлов
  • Просто для новичков
Скачать бесплатно на Windows
Лучшая альтернатива
ChaiNNer
Оценка 8.5
  • Высокий порог входа
  • Модели нужно искать отдельно
  • Видео через кадры медленнее
Скачать ChaiNNer
Загрузка начнётся после нажатия

Как устроена работа в ChaiNNer

Рабочее пространство ChaiNNer напоминает редакторы нодовых материалов и композитинга: слева находится каталог узлов, в центре — практически неограниченный холст, сверху — управление запуском, паузой и остановкой. Узел содержит параметры и цветные разъемы. Разъемы имеют типы, поэтому изображение нельзя случайно подключить туда, где ожидается, например, строка, число или модель. Во время протягивания связи интерфейс показывает совместимые точки, а статическая проверка графа помогает поймать часть ошибок еще до вычислений.

Добавить узел можно из списка или через контекстное меню на холсте. Для больших схем удобен другой прием: вытянуть провод из существующего выхода в пустое место и выбрать подходящий узел из контекстного списка. В этом случае новый элемент сразу создается с совместимой связью. Узлы можно выделять группой, перемещать, сворачивать, переименовывать двойным щелчком по заголовку и временно выключать. Отдельный режим пропуска позволяет не выполнять выбранный узел, но не обрывать всю последующую ветку так, как это происходит при полном отключении.

Основное окно ChaiNNer с каталогом узлов слева и нодовой цепочкой на рабочем холсте

Самый важный навык — читать граф слева направо не как картинку, а как поток данных. Желтый или другой цвет линии не означает этап номер два сам по себе: одна и та же картинка может разветвляться на несколько процессоров, числовой результат измерения может управлять параметром другого узла, а строка с именем исходного файла — формировать имя сохранения. В сложных цепочках часть линий несет не пиксели, а метаданные и управляющие значения.

Минимальная цепочка для нейросетевого увеличения

Базовый граф для суперразрешения состоит из трех обязательных логических частей: источник изображения, источник модели и узел, который применяет эту модель. Практически всегда добавляется и сохранение. Для единичного файла используют Load Image, для весов — Load Model соответствующего фреймворка, затем оба выхода соединяют с Upscale Image, а готовое изображение передают в Save Image. Узел View Image полезен как ответвление, чтобы сравнить результат до записи на диск.

В такой схеме Load Image отдает не только пиксели, но и каталог и имя. Это удобно: каталог можно передать в сохранение или преобразовать, а имя — использовать без ручного копирования. Load Model анализирует поддерживаемые веса и сообщает графу параметры модели, включая масштаб и число каналов. Благодаря этому Upscale Image может заранее вычислить ожидаемые размеры результата и предупредить о несовместимости.

Для первого запуска лучше не строить многоступенчатый конвейер. Сначала стоит убедиться, что одна модель корректно загружается и обрабатывает один небольшой файл. После этого добавляются пакетный итератор, цветовая коррекция, постобработка и автоматическое именование. Такой порядок сокращает количество неизвестных: если сложная цепь падает, проще понять, на каком именно расширении функциональности появилась проблема.

Узлы, типы соединений и проверка графа

Каждый вход ChaiNNer описывает ожидаемый тип. Для изображений учитываются размеры и количество каналов, для моделей — семейство и свойства, для чисел — допустимый диапазон, для строк — назначение поля. Поэтому соединения выполняют роль контракта: редактор отказывается связывать заведомо несовместимые данные. Это особенно заметно при работе с RGB и RGBA, масками, одноканальными изображениями и нейросетями, которые обучены строго под определенное число входных и выходных каналов.

Типизация не отменяет смысловых ошибок. Например, два RGB-изображения могут формально подходить к узлу смешивания, но иметь разные размеры или не совпадать по назначению. Аналогично модель может быть корректно распознана, но давать нежелательный результат на конкретном типе исходников. ChaiNNer проверяет структуру вычисления, а художественную и предметную пригодность модели пользователь оценивает сам.

Когда граф нельзя запустить, программа указывает узлы с невалидными обязательными входами. Это полезнее, чем сообщение об ошибке только в конце длительной задачи: можно пройти по отмеченным элементам, проверить пустые пути, незаполненные поля и неподходящие соединения. В больших проектах стоит давать ключевым узлам понятные имена — например, 4x photo model, reference resize или web export — чтобы сообщение об ошибке сразу указывало на нужную ветку.

Разветвление и несколько результатов

Один выход можно подключить к нескольким узлам. Поэтому из одного апскейленного изображения легко получить, например, PNG без потерь, JPEG для быстрой публикации и уменьшенную копию для превью. В такой архитектуре не требуется повторно запускать модель для каждого формата, если ветвление происходит уже после тяжелого нейросетевого узла. Это экономит время и делает цепочку логически прозрачной.

То же относится к сравнительным схемам. Исходник можно отправить в обычный Resize, а параллельно — в Upscale Image, после чего обе ветви визуально сравнить или собрать в композицию. Такой подход полезен при подборе модели: он показывает, где реальное восстановление деталей отличается от простого интерполяционного увеличения.

PyTorch, NCNN, ONNX и TensorRT: какой движок выбрать

ChaiNNer отделяет визуальную схему от вычислительного фреймворка. Для нейросетевых задач доступны узлы PyTorch, NCNN, ONNX и TensorRT. Они не являются взаимозаменяемыми во всех случаях: набор поддерживаемых архитектур, формат весов, требования к оборудованию и параметры узла отличаются. Поэтому выбирать стоит не самый быстрый движок вообще, а связку, которая поддерживает нужную модель и доступный ускоритель.

ФреймворкКогда удобенКлючевая особенность
PyTorchБольшая коллекция моделей суперразрешения и восстановленияШирокая поддержка архитектур через Spandrel; на NVIDIA используется CUDA, на Apple Silicon — MPS, предусмотрен CPU-режим.
NCNNУскорение на разных GPU, включая Vulkan-совместимое оборудованиеПодходит для систем, где PyTorch не дает удобного GPU-пути; модели можно конвертировать из поддерживаемых форматов.
ONNXУниверсальные модели, в том числе удаление фонаИспользует ONNX Runtime и удобен там, где модель уже распространяется в ONNX или архитектура не относится к обычным SR-весам.
TensorRTNVIDIA и повторяемые тяжелые цепочкиТребует подготовленного/сконвертированного движка, зато ориентирован на эффективный инференс на совместимых GPU.

На практике PyTorch чаще выбирают для экспериментов с большим количеством моделей, потому что цепочка Load Model → Upscale Image понимает множество архитектур суперразрешения. NCNN удобен для переносимости и часто используется с Vulkan. ONNX нужен не только для апскейла: например, Remove Background работает с поддерживаемыми моделями U2Net/rembg. TensorRT имеет смысл, когда конфигурация уже устоялась и важна скорость повторных прогонов на NVIDIA.

Если один и тот же проект должен работать на разных компьютерах, не стоит рассчитывать, что достаточно открыть файл цепочки. Веса модели и установленные зависимости тоже должны быть доступны. Удобная практика — хранить модели в отдельной понятной структуре каталогов и после переноса проекта один раз обновлять пути в загрузочных узлах, а не разбрасывать копии моделей рядом с каждым графом.

Цепочка ChaiNNer с загрузкой модели и узлами нейросетевого апскейла

Dependency Manager и вычислительные зависимости

Нейросетевые категории появляются и работают только после установки соответствующих пакетов. Для этого в ChaiNNer предусмотрен Dependency Manager. Он управляет интегрированной средой Python и пакетами фреймворков, поэтому пользователю не нужно вручную собирать виртуальное окружение для обычного сценария. При первом запуске программе требуется получить Python и необходимые компоненты; если загрузка заблокирована сетью, прокси или фильтрацией pip, нейросетевые узлы могут остаться недоступными.

В менеджере зависимостей имеет смысл устанавливать только то, что нужно конкретным графам. Если проект использует PyTorch, наличие ONNX или NCNN само по себе не улучшит качество апскейла. Исключение — операции конвертации, где промежуточный фреймворк может быть обязательным. Такой подход уменьшает объем окружения и упрощает диагностику: меньше пакетов — меньше потенциальных конфликтов.

При проблемах после установки сначала стоит перезапустить ChaiNNer и убедиться, что пакет действительно помечен как установленный. Если узлы не появились, официальные рекомендации также советуют проверить свободную оперативную память и при необходимости удалить пакет, перезапустить программу и установить его заново. Для интегрированной среды критична доступность сети во время первоначальной загрузки.

Системный Python

ChaiNNer умеет работать не только со своей интегрированной средой, но и с системным Python. Это вариант для опытных пользователей, которым нужно контролировать версии библиотек вручную. Он полезен при редких конфигурациях оборудования или нестандартных сборках PyTorch, но одновременно переносит ответственность за совместимость на пользователя. Для обычной работы встроенная среда предсказуемее.

Если переход на системный Python используется как способ обойти проблему с конкретной сборкой CUDA, нужно учитывать все зависимости цепочки. Рабочий импорт torch еще не означает, что корректно установлены вспомогательные библиотеки для моделей, обработки изображений или ONNX. Поэтому после изменения среды разумно проверить простейший граф до открытия большого проекта.

Настройки PyTorch: GPU, FP16 и лимит памяти

В настройках пакета PyTorch можно выбрать GPU, если их несколько, включить CPU-режим, управлять FP16 и задать Memory Budget Limit (GiB). Предел памяти влияет на оценку плиток при инференсе: программа старается подобрать размер фрагмента так, чтобы не выйти за доступный объем VRAM или RAM. Нулевое значение означает отсутствие пользовательского ограничения, но это не отменяет фактическую емкость памяти устройства.

Use FP16 Mode уменьшает расход видеопамяти для моделей, которые поддерживают половинную точность. На RTX это также может ускорять вычисления. Если выбран CPU, ChaiNNer возвращается к FP32, потому что соответствующий путь не предполагает обычный FP16-инференс. Для проблемной модели не следует считать FP16 универсальным решением: архитектура должна поддерживать половинную точность.

Опция принудительной очистки CUDA-кэша после каждого инференса существует как диагностический инструмент, а не как нормальный режим работы. В самом интерфейсе она отмечена как нежелательная, поскольку вмешивается в механизм кэширования PyTorch и способна заметно замедлить цепочку. Ее имеет смысл пробовать только при повторяющихся ошибках выделения VRAM, когда стандартное управление памятью не помогает.

При нескольких NVIDIA GPU параметр GPU выбирает устройство для PyTorch, но он не превращает один узел в распределенное вычисление по нескольким картам. Если требуется использовать разные ускорители для разных задач, нужно оценивать возможности конкретных пакетов и структуру процесса, а не ожидать автоматического суммирования видеопамяти.

Как ChaiNNer загружает модели суперразрешения

Узел Load Model не содержит встроенной библиотеки художественных профилей. Он принимает файл весов, распознает поддерживаемую архитектуру и создает объект модели для следующих узлов. Для PyTorch значительную часть совместимости обеспечивает Spandrel: поддерживаются многочисленные семейства, в том числе варианты ESRGAN, SPAN, OmniSR и другие архитектуры, которые встречаются в сообществах суперразрешения.

Из этого следует важное ограничение: ChaiNNer отвечает за исполнение модели, а не за то, насколько она подходит фотографии, аниме, пиксельной графике или текстуре. Две модели с одинаковым масштабом 4× могут вести себя совершенно по-разному: одна усиливает микроконтраст и выдумывает фактуру, другая сглаживает шум и сохраняет контуры. Выбор модели — часть рабочего процесса, а не скрытая автоматическая оптимизация.

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

Папка моделей и сравнение нескольких вариантов

Load Models позволяет итерировать по набору моделей. Это удобно при сравнении: один тестовый исходник прогоняется через каждую модель, а имя модели передается в Text Pattern или другой строковый узел и становится частью имени результата. Такой проект помогает быстро сформировать серию файлов с одинаковым источником и разными методами обработки.

При сочетании нескольких итераторов важно учитывать правила их длины. Поддерживается совместная работа итераторов одинаковой длины, но это не следует воспринимать как произвольные вложенные циклы. Если задача требует декартово произведение каждый файл через каждую модель, проще явно выбрать схему, рассчитанную на такую итерацию, либо выполнить сравнение по этапам. Неправильное сочетание генераторов может быть заблокировано валидатором еще до запуска.

Upscale Image: масштаб, плитки и прозрачность

Upscale Image — центральный узел нейросетевого увеличения. В PyTorch-варианте он получает изображение и SR-модель, после чего может показать Custom Scale, выбор размера плитки, тип заполнения границ и, для подходящих RGBA-случаев, отдельную обработку альфа-канала. Набор полей зависит от свойств модели: интерфейс скрывает параметры, которые для нее не имеют смысла.

Custom Scale позволяет задать итоговый коэффициент независимо от базового масштаба модели. Если, например, модель увеличивает 2×, а требуется 4×, она может быть применена повторно. Если нужный коэффициент нельзя получить точным числом повторов, ChaiNNer увеличивает до ближайшего достаточного масштаба, а затем уменьшает результат до заданного значения. Такой режим удобен, но повторный прогон модели меняет характер изображения сильнее, чем одно применение.

Поэтому пользовательский масштаб стоит выбирать исходя не только из разрешения файла. Повторное применение 2× модели для достижения 8× может чрезмерно усиливать характерные для нее артефакты. Если доступна качественная модель, непосредственно обученная на нужный коэффициент или более подходящая по типу контента, она часто дает более контролируемый результат.

Tile Size

Плиточный инференс нужен, когда цельное изображение не помещается в память. ChaiNNer делит кадр на перекрывающиеся фрагменты, обрабатывает их отдельно и собирает обратно. В автоматическом режиме программа оценивает доступный бюджет с учетом модели и изображения. Если оценка получается неудачной, можно выбрать ручной размер плитки или пользовательское значение.

Чем крупнее плитка, тем меньше накладных расходов на разбиение и склейку, поэтому при достаточной памяти крупные значения обычно быстрее. Но слишком большая плитка приводит к ошибке выделения памяти. При OOM нужно не уменьшать сам исходник первым действием, а сначала снизить Tile Size или ограничить память. Для моделей с внутренним тайлингом ChaiNNer может отключать внешнее разбиение, чтобы не дублировать механизм.

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

Padding

Заполнение по границам определяет, что нейросеть видит за пределами фрагмента или изображения. Неподходящий тип padding способен влиять на края, особенно у текстур и изображений с резким контрастом возле рамки. Если артефакт появляется только у самого края, имеет смысл проверить не только модель, но и режим заполнения.

Separate Alpha

Для RGBA входа может быть доступен Separate Alpha. При включении альфа-канал увеличивается отдельно от цветовых каналов. Это помогает сохранить более спокойные и точные переходы прозрачности, но в некоторых случаях создает темные каймы у границ прозрачного объекта. Для мягких масок отдельная обработка часто полезна; для графики с уже подготовленным премультиплицированным краем результат нужно проверять визуально.

Коррекция цвета после нейросетевого апскейла

Некоторые SR-модели немного меняют общую цветопередачу, локальный контраст или оттенки. ChaiNNer предлагает специальные узлы Average Color Fix и Wavelet Color Fix, которые используют исходное изображение как цветовой ориентир. Это особенно важно в цепочках реставрации, где геометрические детали можно усиливать моделью, но глобальный цвет желательно сохранить максимально близким к оригиналу.

Типовая схема строится так: исходник одновременно идет в Upscale Image и в ветку эталона, после чего апскейленный результат и референс подключаются к узлу цветовой коррекции. Такая конструкция отделяет восстановление деталей от восстановления цвета. Если же после апскейла планируется художественная цветокоррекция, специализированный color fix может быть лишним и только мешать задуманному изменению.

Сравнивать цвет лучше не по миниатюре узла, а на репрезентативном участке изображения. Небольшой сдвиг температуры часто не виден на сложной сцене, но становится очевидным на нейтральных областях, коже или однородных текстурах. В массовой обработке стоит сначала проверить несколько разных файлов, чтобы не исправлять одну фотографию ценой ухудшения остальных.

Обычная обработка изображений без нейросети

ChaiNNer полезен и как конструктор классических операций. В библиотеке есть изменение размера, кадрирование, добавление полей, вращение, отражение, коррекция уровней, яркости, контраста, оттенка, насыщенности и гаммы. Есть автоматическое растяжение контраста, резкость, размытия и операции смешивания. Эти узлы можно применять до нейросети, после нее или в параллельных ветках.

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

Resize нужен не только в конце. Он помогает привести изображения к общему размеру перед смешиванием, подготовить референс для цветовой коррекции или уменьшить кадр до нейросетевого этапа, если модель используется как восстановитель деталей. Для точных размеров удобно связать параметры с вычислительными узлами, а не вводить значения вручную в нескольких местах.

Crop, Pad, Rotate и Flip

Кадрирование в ChaiNNer включает не только ручные смещения. Есть операции удаления постоянной рамки и обрезки до содержимого. Это полезно при сканах, спрайтах и текстурах, где пустая или одноцветная окантовка мешает дальнейшей обработке. Pad выполняет обратную задачу — расширяет холст, что удобно для моделей, чувствительных к краям, или для подготовки ресурса к заданному размеру.

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

Резкость и размытия

Для повышения локального контраста доступны, в частности, Unsharp Mask и High Boost Filter. Для смягчения — Gaussian, box, median, surface и lens blur. Выбор зависит от артефакта: median эффективен против одиночных выбросов, Gaussian дает предсказуемое равномерное сглаживание, а поверхностные методы лучше сохраняют часть границ. Ставить любой blur как обязательный этап перед каждой моделью не следует.

После апскейла резкость часто нужна в меньшей степени, чем кажется при просмотре уменьшенной копии. Модель уже создает высокочастотные детали; дополнительный High Boost легко переводит их в ореолы. Для финального веб-размера разумнее сначала уменьшить результат, а затем применить умеренную резкость к фактическому размеру публикации.

Яркость, уровни, цвет и смешивание

Brightness & Contrast, Color Levels, Hue & Saturation, Gamma и Stretch Contrast закрывают базовую подготовку изображения. Они особенно полезны внутри пакетной цепочки, когда входные файлы получены из одного источника и требуют одинаковой операции. Для разношерстной папки фиксированные значения могут быть опасны: одинаковая прибавка контраста ведет себя по-разному на темном скане и уже контрастной иллюстрации.

Узел Blend Images смешивает базу и наложение распространенными режимами, включая Normal, Multiply, Screen и Overlay. Благодаря графу можно заранее вычислить маску, изменить ее размер, применить к одной ветке фильтр и только потом выполнить смешивание. В обычном редакторе это делается слоями; здесь вся логика остается частью воспроизводимой цепочки.

Для сложных композиций полезно держать ветви визуально разнесенными и давать им понятные имена. Когда изображение несколько раз проходит через смешивание, цветовую коррекцию и маски, пересекающиеся провода быстро превращаются в проблему обслуживания. Простая геометрия графа — не косметика, а способ уменьшить количество ошибок при последующих изменениях.

Remove Background и работа с масками

Remove Background находится в ONNX-категории и рассчитан на совместимые модели семейства U2Net/rembg. Узел получает изображение и модель, после чего может отдавать RGBA-результат с прозрачным фоном и маску. Такой вывод удобно разветвить: прозрачное изображение сохранить как PNG, а маску отдельно обработать морфологией, размытием или использовать в другой композиции.

Качество вырезания определяется прежде всего моделью и исходником. Волосы, полупрозрачные материалы, мелкие ветви и похожий по цвету фон остаются трудными случаями. ChaiNNer не превращает любую маску в ручной ротоскопинг; его сильная сторона в том, что результат модели можно сразу включить в воспроизводимую постобработку.

При пакетном удалении фона лучше сохранять тестовые маски отдельно хотя бы на этапе настройки. Так легче понять, проблема возникает в самой сегментации или уже в последующих операциях с альфа-каналом. Если края темнеют после сохранения и повторного открытия, следует проверить, как конкретный формат и последующая программа трактуют прозрачность.

Upscale Face: восстановление лиц

Upscale Face использует детекцию лиц и специализированную PyTorch-модель восстановления. В поддерживаемых сценариях он может работать с моделями вроде GFPGAN и восстанавливать найденные лица отдельно от общего изображения. Такой узел предназначен не для замены обычного SR на всем кадре, а для локальной коррекции областей, где стандартная модель дает слишком мягкие или искаженные лица.

Лицевая реставрация всегда предполагает реконструкцию, поэтому результат нельзя считать достоверным восстановлением личности или мелких черт, которых нет в исходнике. На архивной фотографии алгоритм способен создать правдоподобные ресницы, губы или текстуру кожи, но это синтез. Для документальных задач стоит сохранять исходник и не выдавать восстановленные детали за фактические.

Если Upscale Face падает или не находит объект, проверяют совместимость модели, масштаб и сам факт уверенного детектирования лица. Крошечные лица, сильный профиль, закрытия и стилизованный рисунок могут не пройти детектор. В таком случае полезнее изменить общую цепочку или выбрать модель для всего изображения, чем повышать вес реставрации без контроля.

Пиксельная графика и палитры

Для пиксель-арта нейросетевой SR не всегда является правильным инструментом. ChaiNNer включает Resize Pixel Art с алгоритмами вроде HQ2x, Eagle и AdvMAME. Они увеличивают графику по дискретным правилам и лучше сохраняют характер пиксельной структуры, чем обычная билинейная интерполяция.

Работа с палитрой строится отдельными узлами. Palette from Image извлекает набор цветов, Apply Palette применяет палитру, а Dither (Palette) позволяет представить промежуточные оттенки дизерингом. Quantize to Reference полезен, когда после увеличения нужно вернуть результат к цветам, близким к локальным цветам исходника, а не просто к одной глобальной таблице.

Для спрайтов это позволяет собрать цепочку, где исходник разбирается на элементы, каждый проходит масштабирование и квантование, а затем лист собирается обратно. Важно заранее выбрать правило обработки прозрачности и границ, иначе на стыках могут появиться цвета, которых не было в исходном наборе.

Текстуры, normal map и DDS

ChaiNNer заметно сильнее простых апскейлеров при подготовке игровых текстур. Normal Map Generator строит карту нормалей из цветовой/диффузной текстуры, а Add Normals, Scale Normals и Balance Normals позволяют объединять и корректировать нормали. Metal to Specular помогает преобразовывать материалы между некоторыми PBR-представлениями.

Особенно важен вывод Save Image в DDS. Узел умеет писать несколько BC-форматов, включая BC1, BC3, BC4, BC5 и BC7, линейные и sRGB-варианты, а также ряд несжатых и legacy-форматов. Для normal map доступны двухканальные BC5 UNORM и SNORM. Можно генерировать mipmaps, выбирать качество BC7, метрику ошибки и дизеринг для части компрессоров.

Параметр Separate Alpha for MipMaps предназначен для случаев, когда альфа-канал хранит не прозрачность, а отдельную материальную величину. Обычное уменьшение RGBA склонно обнулять цвет прозрачных пикселей, что вредно, если в альфе лежит, например, дополнительная карта материала. Раздельная обработка помогает, но ее нельзя включать для обычной прозрачности без проверки: вокруг прозрачных краев могут появиться темные артефакты.

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

Spritesheet: разбор и обратная сборка

Split Spritesheet разбивает лист на элементы, после чего downstream-часть графа выполняется для каждого фрагмента. Merge Spritesheet собирает обработанные элементы обратно. Такой подход полезен для игровых ресурсов, UI-атласов и анимации, где фильтр должен применяться одинаково к каждому тайлу.

Главная практическая задача — не потерять порядок и геометрию. Если отдельная операция меняет размер спрайта не в том коэффициенте или добавляет неодинаковые поля, обратная сборка уже не соответствует исходной сетке. Поэтому изменение размера и crop лучше параметризовать от общих значений, а не настраивать по-разному в нескольких ветках.

Для пиксельных атласов стоит избегать фильтров, которые смешивают соседние цвета на внешней границе тайла. При нейросетевом апскейле также нужно учитывать контекст: модель видит каждый фрагмент отдельно и может трактовать край как реальную границу объекта. Иногда качественнее сначала увеличить весь лист, а затем разрезать; иногда наоборот. Выбор зависит от того, есть ли между спрайтами достаточные отступы.

Пакетная обработка с Load Images

Load Images превращает папку в итератор. Узел проходит по поддерживаемым изображениям и на каждой итерации отдает картинку, корневой каталог, относительный путь подкаталога, имя и индекс. Поэтому downstream-граф может сохранять исходную структуру каталогов, добавлять суффиксы и вести отдельные ветви без ручного перечисления файлов.

Есть обычный рекурсивный режим и фильтрация через выражение WCMatch. Это полезно, когда в дереве нужно обрабатывать только конкретные подкаталоги или исключать часть имен. Дополнительно можно включить Use limit, чтобы тестировать цепочку на первых нескольких файлах, и Stop on first error, чтобы прервать пакет сразу после проблемного изображения.

Без Stop on first error итератор способен собрать ошибки и сообщить о них после обработки остальных элементов. Такой режим удобен для большой папки: один поврежденный файл не обязательно должен останавливать сотни корректных. При отладке, наоборот, остановка на первой ошибке экономит время и быстрее показывает причину.

Сохранение структуры подкаталогов

Выход Subdirectory Path можно передать в одноименный вход Save Image. Тогда обработанные файлы сохраняются в выходной корневой каталог с повторением относительной структуры исходной папки. Это практичнее, чем сваливать тысячи результатов в один каталог и затем восстанавливать структуру по именам.

Если нужно изменить структуру, используются узлы работы со строками и путями. Например, имя модели можно добавить к подкаталогу, а исходный Name — к имени файла. Главное — не включать расширение в поле Image Name, потому что формат и расширение задаются самим узлом сохранения.

Автоматическое именование: Text Pattern, Regex и пути

Воспроизводимая пакетная обработка требует предсказуемых имен. Text Pattern собирает строку из нескольких значений, Text Append соединяет части, а Regex Find извлекает нужный фрагмент из имени или пути. Так можно автоматически формировать имена вида исходное-имя_модель_4x без ручного переименования каждого файла.

Значения имен и путей лучше строить из выходов загрузочных узлов, а не дублировать текст в нескольких местах. Тогда при переносе цепочки на другую папку достаточно поменять один источник. Это особенно важно в графах с несколькими Save Image: единое строковое правило предотвращает ситуации, когда одна ветка продолжает писать в старое место.

Регулярные выражения нужны не только для косметики. Если исходные имена кодируют номер кадра, тип текстуры или вариант материала, Regex Find может выделить эту часть и направить результат в соответствующий каталог. Но сложное выражение следует проверять на небольшой выборке, потому что неожиданное имя может дать пустой результат и привести к конфликту файлов.

Save Image: форматы и параметры экспорта

Save Image получает изображение, базовый каталог, необязательный относительный подкаталог и имя без расширения. Каталог создается автоматически при необходимости. Опция Skip existing files позволяет не перезаписывать уже существующие результаты — это удобно при длинной пакетной обработке, когда папка пополняется новыми исходниками.

Доступны PNG, JPG, GIF, BMP, TIFF, WEBP, TGA, DDS и AVIF. Набор параметров меняется вместе с форматом. Для PNG можно выбрать 8 или 16 бит на канал; для TIFF — 8, 16 или 32-bit float и, для целочисленных вариантов, отсутствие компрессии, LZW или ZIP. WEBP может работать в lossless-режиме или с качеством, JPEG дает качество, chroma subsampling и Progressive.

ФорматКлючевые настройки в Save ImageПрактическое применение
PNG8/16 бит на каналМастер-файлы без потерь, прозрачность, промежуточные результаты.
JPGQuality 0–100, 4:4:4/4:4:0/4:2:2/4:2:0, ProgressiveФотографии и компактные публикационные копии без альфа-канала.
WEBPLossless или QualityВеб-вывод с выбором между без потерь и компактным lossy.
TIFF8/16/32-bit float; LZW/ZIP для 8/16 битПромежуточная профессиональная обработка и повышенная разрядность.
AVIFQuality и chroma subsamplingСовременный компактный вывод, если следующий этап поддерживает AVIF.
DDSBC/DXT/несжатые варианты, mipmaps и параметры компрессииИгровые текстуры, normal map и ресурсы движков.

Формат нужно выбирать по следующему этапу, а не по принципу самый новый. 16-битный PNG или float TIFF имеет смысл, если последующая обработка действительно сохраняет повышенную точность. Для финального JPEG после нейросетевого апскейла параметр subsampling влияет на цветные мелкие детали: 4:4:4 сохраняет больше цветовой информации, а 4:2:0 лучше сжимает файл.

Параметр Skip existing files не проверяет, соответствует ли уже имеющийся файл текущей модели и настройкам. Если изменить цепочку и повторно запустить ее в ту же папку, старые результаты будут пропущены. Поэтому при смене модели разумно менять суффикс или выходной каталог, а не полагаться только на существование файла.

Нодовая цепочка ChaiNNer с обработкой изображения и узлом сохранения результата

Видео: Load Video, обработка кадров и Save Video

Видео в ChaiNNer рассматривается как последовательность кадров, к которой применяются обычные image-узлы. Load Video читает клип и отдает кадры, каталог, имя, FPS и аудиопоток. После обработки кадры собираются Save Video. Это делает доступными те же модели и фильтры, что и для изображений, но такой путь не предназначен для простой перекодировки, потому что последовательная обработка кадров через граф значительно тяжелее обычного FFmpeg.

Цепочка ChaiNNer для покадрового увеличения видео и последующего сохранения ролика

Типовой граф выглядит так: Load Video → Resize/Upscale Image → color fix → Save Video, а модель подключается отдельным Load Model. FPS из загрузочного узла нужно передать в сохранение, если требуется сохранить исходную частоту. Аудиопоток можно подключить отдельно, чтобы попытаться скопировать или перекодировать звук в совместимый формат.

Интерфейс ChaiNNer с видеопотоком и настройкой узла Save Video

Форматы и кодеки Save Video

В простом режиме Save Video предлагает MP4 с H.264/AVC, MP4 с H.265/HEVC, WebM и GIF, а вместо низкоуровневых параметров используется шкала качества. В расширенном режиме доступны контейнеры MKV, MP4, MOV, WebM, AVI и GIF. Набор кодеков зависит от контейнера: H.264, H.265, VP9 и для MKV также lossless FFV1.

Для H.264/H.265 доступны пресеты от ultrafast до veryslow и CRF, для VP9 — CRF. Есть поле Additional parameters, позволяющее добавлять дополнительные параметры FFmpeg. Это дает гибкость, но одновременно повышает риск несовместимой комбинации; использовать поле стоит только если понятно, какой аргумент и к какому энкодеру относится.

H.264 и H.265 требуют четной ширины и высоты кадра в используемой конфигурации. Если после crop или нестандартного resize получается нечетный размер, запись может завершиться ошибкой. Исправление — привести кадр к четным значениям перед Save Video, например через расчет и Resize или небольшой Pad.

Аудио

Аудиовход необязателен. В режиме Auto программа старается сохранить звук уместным способом; доступны копирование и перекодирование. Для WebM при перекодировании используется Opus, для других подходящих контейнеров — AAC. Если копирование исходного аудиокодека несовместимо с выбранным контейнером, mux может не сработать; тогда лучше включить транскодирование или собрать звук с видео отдельным FFmpeg-процессом.

Почему видео может обрабатываться очень долго

Каждый кадр проходит через нейросетевой узел как отдельное изображение. Если минутный клип имеет 30 FPS, это 1800 инференсов; при 60 FPS — 3600. Масштаб 4× увеличивает площадь кадра в 16 раз, а вместе с ней растут требования к памяти и времени. Поэтому для длинных роликов сначала стоит сделать короткий тестовый фрагмент и подобрать модель, tile size и итоговый масштаб.

ChaiNNer не является специализированным интерполятором кадров или монтажной системой. Его видео-ветка особенно полезна, когда нужно применить к кадрам те же image-модели и фильтры, что используются для статических файлов. Простую смену контейнера, битрейта или кодека рациональнее выполнять FFmpeg напрямую.

Итераторы и пакетная логика

Итераторы — одна из причин, по которой ChaiNNer отличается от простого GUI для апскейла. Load Images и Load Video генерируют последовательность изображений, Load Models — последовательность моделей, Range — числовую последовательность. Все узлы ниже по графу выполняются в контексте итерации, а collector-узлы вроде Save Video собирают результаты.

Внутри одной ветки нужно четко понимать, что является постоянным значением, а что меняется на каждой итерации. Один Load Model дает постоянную модель для всех файлов. Load Models меняет модель по итерациям. Аналогично один текстовый суффикс одинаков для всей серии, а имя из Load Images обновляется на каждом файле.

Совместные итераторы должны иметь согласуемую длину. Текущая логика позволяет сочетать одинаковые по длине последовательности, но произвольное вложение и комбинация циклов не являются общей заменой языку программирования. Если граф становится похож на тройной вложенный цикл с множеством зависимостей, проще разбить задачу на несколько цепочек или использовать CLI для внешней оркестрации.

При длительных сериях прогресс и ETA помогают оценить оставшееся время, но точность зависит от однородности элементов. Если первые кадры маленькие, а следующие изображения в несколько раз крупнее, средняя скорость будет меняться. Для честной оценки тестовую выборку лучше делать репрезентативной по размеру и типу контента.

Условия, Compare и Logic Operation

В ChaiNNer можно строить ветвящуюся логику без скрипта. Compare сравнивает числа, Logic Operation объединяет логические результаты, а Conditional передает один из двух входов в зависимости от условия. Важная особенность — невыбранная ветвь не выполняется. Это позволяет экономить вычисления, а не просто выбирать между двумя уже готовыми результатами.

Практический пример — проверка разрешения. Get Dimensions получает ширину и высоту. Compare определяет, меньше ли нужная сторона заданного порога. Conditional выбирает ветку с Upscale Image только для маленьких файлов, а уже крупные изображения пропускает дальше без нейросети. В пакетной папке это предотвращает бессмысленное увеличение материалов, которые уже имеют достаточное разрешение.

Условия полезны и при форматировании. По размеру можно выбрать разные уровни уменьшения, по индексу — выполнять редкую контрольную запись, по числовому параметру — включать более сильный фильтр. Но если условие зависит от семантики изображения — например, это лицо или это аниме — нужен отдельный классификатор; обычный Compare сам по себе этого не понимает.

Math, Round, Percent и вычисление размеров

Числовые узлы превращают статическую схему в параметрический граф. Math выполняет арифметику, минимумы, максимумы, логарифмы и модуль; Round округляет, Percent помогает работать с долями. Вместе с Get Dimensions они позволяют вычислять размеры на основе реального входа.

Например, для ограничения длинной стороны можно получить ширину и высоту, определить соотношение и вычислить коэффициент уменьшения. Для видео можно привести каждую сторону к ближайшему четному числу, чтобы H.264/H.265 не отказались от записи. Для игрового ресурса можно округлять размер к кратному блоку или степени, если этого требует следующий инструмент.

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

При использовании формул нужно помнить о целых и дробных значениях. Размер изображения в пикселях должен в итоге стать целым числом, а FPS может быть дробным. Если одна и та же формула используется в разных местах, лучше один раз вычислить значение и развести выход, чем повторять выражение вручную и рисковать несовпадением.

Просмотр результата и диагностика качества

View Image показывает результат прямо в узле, а View Image (External) открывает изображение во внешнем просмотре. Встроенное превью удобно для ориентации на схеме, но маленькая миниатюра не годится для окончательной оценки нейросетевого апскейла. Артефакты ресниц, текста, тонких линий и повторяющейся фактуры становятся заметны только при просмотре в масштабе 100%.

Для сравнения моделей полезно сохранять кропы одних и тех же областей. Если каждый результат открывается в разном масштабе или на другой позиции, легко перепутать реальное качество с эффектом размера. Стабильная тестовая цепочка должна использовать один исходник, одинаковый итоговый размер и одинаковую постобработку.

При оценке нельзя смотреть только на резкость. Хороший SR сохраняет геометрию и не превращает шум в псевдодетали. На фотографиях стоит проверять кожу, волосы, мелкий текст и повторяющиеся структуры; на аниме — ровные контуры, градиенты и глаза; на игровых текстурах — швы, альфа-канал и соответствие normal/specular карт.

Файл цепочки .chn и повторяемые процессы

Схема сохраняется в файл цепочки .chn. Это не изображение графа, а описание узлов, их параметров и соединений. Такой файл удобно использовать как технологический рецепт: один раз настроить обработку текстур, фотографий или видеокадров, а затем открывать ее с новыми входами.

Пути к внешним изображениям и моделям остаются важной частью проекта. Если переместить модели или исходники, загрузочные узлы могут потерять файлы. Для переносимых процессов имеет смысл держать структуру каталогов простой и избегать случайных абсолютных путей на временные папки. Когда цепочка используется несколькими людьми, полезно отдельно договориться о размещении моделей.

Сложный граф лучше строить блоками: источник, подготовка, нейросеть, коррекция, экспорт. Даже если редактор не требует такого визуального порядка, он облегчает сопровождение. Переименование узлов и аккуратное размещение линий иногда экономит больше времени, чем попытка сократить схему на один служебный элемент.

CLI: запуск сохраненной цепочки без интерфейса

ChaiNNer умеет запускать .chn из командной строки. Базовая форма — chainner.exe run "path/to/your-chain.chn". Команда открывает цепочку и выполняет ее так, как если бы пользователь нажал Run в интерфейсе. Нулевой код завершения означает успешное выполнение, ненулевой — ошибку.

Для автоматизации предусмотрен файл переопределений: chainner.exe run "path/to/your-chain.chn" --override "path/to/your-input-overrides.json". В JSON секция inputs связывает специальные идентификаторы входов со строками, числами или null. Идентификатор можно получить из контекстного меню нужного входа через команду Copy Input Override ID.

Переопределение поддерживается не для всех контролов. Документация указывает text, number, file и directory inputs; dropdown, checkbox и generic inputs не меняются этим способом. Поэтому цепочку для автоматического запуска лучше проектировать так, чтобы основные переменные — путь к входу, выходной каталог, числовой коэффициент — находились именно в поддерживаемых входах.

CLI отмечен как экспериментальный режим, поэтому его не следует считать стабильным API для критичного производственного сервиса. Он полезен как мост между визуально построенным алгоритмом и внешним скриптом: скрипт готовит параметры, запускает готовую цепочку и анализирует код завершения, а вычислительная логика остается в ChaiNNer.

Как ускорить цепочку и снизить расход памяти

Главный фактор времени при нейросетевом апскейле — количество обработанных пикселей. Увеличение 1920×1080 в 4× дает 7680×4320, то есть в 16 раз больше пикселей в выходе. Поэтому даже одинаковая модель резко меняет нагрузку при переходе от небольшого изображения к 4K-кадру. Перед оптимизацией интерфейса стоит сначала проверить, действительно ли нужен такой итоговый масштаб.

  • Используйте максимально крупный стабильный Tile Size, а не минимальный: слишком мелкие плитки увеличивают накладные расходы.
  • На совместимых моделях включайте FP16, если он стабильно работает на вашем GPU и дает выигрыш по памяти.
  • Не ставьте тяжелую модель в несколько параллельных ветвей, если можно один раз вычислить результат и разветвить уже готовое изображение.
  • Уменьшайте тестовую выборку через Use limit, пока настраиваете пакетный процесс.
  • Не выполняйте через Save Video простое перекодирование, которое быстрее сделать FFmpeg без покадровой обработки графом.
  • Сохраняйте промежуточные файлы только там, где они нужны для контроля или повторного использования: дисковая запись тоже добавляет время.

Если GPU регулярно упирается в VRAM, сначала уменьшите плитку или задайте Memory Budget Limit. Принудительная очистка CUDA-кэша — более грубая мера. Она может решить отдельные проблемы выделения памяти, но делает инференс медленнее, поэтому ее стоит включать только после воспроизводимого подтверждения проблемы.

На CPU те же узлы могут работать, но время будет существенно больше. CPU-режим полезен для проверки совместимости, небольших изображений и систем без подходящего GPU. Использовать его для длинного 4K-видео с тяжелой SR-моделью обычно нерационально.

Типовые ошибки и способы их устранения

Узел PyTorch не появился после установки

Сначала проверьте статус пакета в Dependency Manager и перезапустите ChaiNNer. Если категория по-прежнему отсутствует, официальный troubleshooting рекомендует убедиться, что перед запуском есть достаточный запас оперативной памяти, а затем при необходимости удалить PyTorch, перезапустить программу и установить пакет заново. Если установка зависла, причиной может быть блокировка pip-запросов сетью или защитным ПО.

PyTorch использует CPU на системе с NVIDIA

Проверьте, видит ли система драйвер и команду nvidia-smi. Если драйвер не работает на уровне ОС, ChaiNNer не сможет исправить это настройкой внутри приложения. Затем проверьте установку GPU-сборки PyTorch. После смены драйвера или пакета перезапустите программу и повторите простой тестовый граф.

AMD или Intel не ускоряют PyTorch

Не следует исходить из того, что любой GPU автоматически используется любым фреймворком. Для оборудования, где PyTorch-путь не подходит, можно применять NCNN или другой совместимый backend. На Linux для AMD возможны соответствующие PyTorch/ROCm-конфигурации, но их работоспособность зависит от поддерживаемого стека; для переносимого решения NCNN часто проще.

Out of memory

Уменьшите Tile Size, включите FP16 для поддерживаемой модели или задайте меньший memory budget. Проверьте, не держат ли память другие процессы. Если ошибка появляется после нескольких файлов, а не на первом, попробуйте изолировать один тяжелый исходник: возможно, его разрешение значительно больше остальных. Принудительный wipe CUDA-кэша используйте только как диагностический резерв.

NCNN сообщает vkQueueSubmit

Для ошибок очереди Vulkan официальная рекомендация — отказаться от auto-tiling и задать меньший ручной tile size. Это снижает пиковую нагрузку. Если ошибка сохраняется на любом размере, далее проверяют драйвер Vulkan и совместимость конкретного GPU, потому что уменьшение плитки не исправляет неисправный runtime.

Модель загружается, но Upscale Image выдает ошибку каналов

Сравните ожидаемое число каналов модели и реальное изображение. Некоторые модели принимают только RGB, другие рассчитаны на grayscale или специальные входы. Простое преобразование RGBA в RGB может решить несовместимость, если альфа не нужна. Если прозрачность важна, используйте корректную обработку альфа-канала или модель с подходящей схемой.

Сохранение видео падает

Проверьте четность ширины и высоты для H.264/H.265, FPS, путь записи и совместимость контейнера с выбранным кодеком. Затем отключите аудио и попробуйте сохранить только видео: если это работает, проблема находится в mux или аудиоформате. Для WebM при необходимости используйте транскодирование в Opus вместо принудительного копирования несовместимого аудиопотока.

Существующие файлы не обновляются

Проверьте Skip existing files. Если он включен, Save Image пропускает файл только по факту наличия, не сравнивая настройки цепочки. При новой модели используйте новый суффикс или чистый выходной каталог.

Интегрированный Python не запускается

Для первоначальной загрузки интегрированной среды нужен доступ к сети. Если скачивание было повреждено, в troubleshooting рекомендуется удалить папку Python из каталога данных ChaiNNer, чтобы она была получена заново. Системный Python остается запасным вариантом для опытных пользователей, но требует самостоятельно поддерживать совместимые библиотеки.

Практический сценарий: массовый апскейл фотографий

  1. Добавьте Load Images и выберите исходную папку. На этапе настройки включите Use limit и ограничьте выборку несколькими разными файлами.
  2. Добавьте PyTorch Load Model и выберите модель, предназначенную для фотографического контента.
  3. Соедините изображение из Load Images с Upscale Image, модель — с Model-входом. Оставьте автоматический tile size для первого теста.
  4. Если модель заметно меняет цвет, добавьте Average Color Fix или Wavelet Color Fix, подав в качестве reference исходник.
  5. Соберите имя из выхода Name и понятного суффикса, например обозначения модели и масштаба.
  6. Передайте Directory и Subdirectory Path в Save Image, чтобы при необходимости повторить структуру папок.
  7. Выберите PNG для мастер-результата или JPEG/WebP/AVIF для конечной копии с подходящими настройками качества.
  8. После проверки нескольких файлов отключите лимит и запустите всю папку.

В этой схеме нейросеть применяется ровно один раз на файл, а исходное имя и каталог используются как данные. Поэтому цепь не требует правки для каждого изображения. Если позже нужно добавить веб-версию, после цветовой коррекции можно сделать вторую ветку с Resize и отдельным Save Image.

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

Практический сценарий: обработка видеоклипа

  1. Подключите Load Video и проверьте, что из него доступны кадры, FPS и аудиопоток.
  2. Сначала добавьте недорогой Resize или короткий тестовый клип, чтобы проверить весь путь до Save Video без длительного инференса.
  3. Подключите Load Model и Upscale Image; при нехватке VRAM уменьшите tile size.
  4. При необходимости добавьте цветовую коррекцию, используя исходный кадр как reference.
  5. Передайте обработанную последовательность в Save Video, FPS — в соответствующий вход, аудио — в optional Audio Stream.
  6. Выберите простой режим для H.264/H.265/WebM, если не нужны тонкие параметры FFmpeg; Advanced используйте для осознанного выбора контейнера, CRF и preset.
  7. Перед полным запуском проверьте начало, середину и участок с быстрым движением: модель может по-разному вести себя на разных сценах.

Покадровая SR-обработка не гарантирует временную стабильность. Модель, обученная на отдельных изображениях, может немного по-разному реконструировать текстуру на соседних кадрах, создавая мерцание. ChaiNNer выполняет заданный image-процесс, но не добавляет автоматически temporal consistency. Для критичного видео нужна модель или дополнительный инструмент, учитывающий соседние кадры.

Практический сценарий: игровые текстуры

  1. Загрузите текстуры через Load Images, включив рекурсию или WCMatch-фильтр только для нужных файлов.
  2. Разделите типы ресурсов по каталогам или именам: diffuse, normal, mask и UI часто требуют разных цепочек.
  3. Для цветовых текстур примените подходящий SR и проверьте бесшовность; для normal map не используйте произвольную фотомодель как универсальный фильтр.
  4. При необходимости сформируйте или скорректируйте нормали через Normal Map Generator, Add Normals, Scale Normals и Balance Normals.
  5. Сохраните в DDS с форматом, который ожидает движок: например, BC5 для двухканальной normal map или BC7 для качественной цветовой текстуры, если целевая платформа его поддерживает.
  6. Настройте mipmaps и отдельно решите, является ли alpha прозрачностью или материальным каналом.
  7. Сохраните исходную структуру подпапок, чтобы готовые ресурсы можно было подменить пакетно.

Здесь особенно важно не путать техническую совместимость и визуальную пригодность. ChaiNNer позволит записать корректный DDS, но не знает требований конкретной игры к swizzle normal map, цветовым пространствам или содержимому альфа-канала. Эти правила должны быть заложены в саму цепочку пользователем.

Когда использовать Skip и Disable

У узла можно различать полное отключение и пропуск. Полное отключение способно сделать downstream-ветку недоступной, потому что данные больше не производятся. Skip нужен, когда вы хотите временно убрать операцию, сохранив передачу данных дальше. Например, при сравнении можно пропустить дополнительную резкость, не перестраивая все соединения.

На больших графах это удобнее, чем удалять узлы и потом восстанавливать их. Можно держать несколько экспериментальных этапов, переключая их состояние. Но не стоит превращать цепочку в коллекцию десятков выключенных вариантов: со временем становится непонятно, какой режим является рабочим. Для радикально разных процессов лучше сохранить отдельные .chn.

Организация больших цепочек

Большой граф обслуживается легче, если данные движутся в одном направлении и не пересекают весь холст. Источники размещают слева, тяжелые модели — в центре, экспорт — справа. Вспомогательные числовые и строковые узлы группируют рядом с тем параметром, которым они управляют. Такой порядок не влияет на вычисления, но сокращает вероятность подключить провод не туда.

Полезно отделять визуально три вида связей: изображения, модели и метаданные. Даже при цветовой кодировке десятки пересечений усложняют чтение. Если имя файла идет к трем экспортам, можно разместить строковую ветку параллельно основной, а не тянуть ее через узлы обработки изображения.

Сворачивать имеет смысл уже настроенные элементы, если ключевые параметры остаются понятными. ChaiNNer показывает часть важной информации и на collapsed nodes. При отладке проблемный участок лучше снова раскрыть, чтобы увидеть конкретные входы, размеры и текущие значения.

Что ChaiNNer не делает автоматически

  • Не выбирает за пользователя лучшую SR-модель по содержимому изображения.
  • Не гарантирует, что восстановленные нейросетью детали соответствуют реальным деталям исходной сцены.
  • Не превращает покадровый image-upscale в временно согласованную видео-реставрацию.
  • Не делает несовместимую модель совместимой одним переименованием расширения.
  • Не объединяет видеопамять нескольких GPU в один общий пул для обычного узла.
  • Не заменяет знания о DDS, normal map, alpha и цветовых пространствах при подготовке игровых ресурсов.
  • Не является наиболее быстрым способом простого транскодирования видео без обработки кадров.

Эти ограничения важны, потому что ChaiNNer дает много свободы. Нодовая схема позволяет собрать почти произвольный процесс из доступных узлов, но она не скрывает технические решения. Пользователь по-прежнему отвечает за выбор модели, формат данных, допустимую реконструкцию и параметры экспорта.

Сравнение ChaiNNer с аналогами

ПрограммаЛучше подходит дляГлавное ограничение
ChaiNNerСложные воспроизводимые цепочки апскейла, пакетной обработки, масок, текстур и кадров видео с несколькими backendТребует понимания нод, моделей и зависимостей; быстрый результат в один клик не является главным сценарием.
UpscaylПростой массовый апскейл изображений на базе готовых моделей и Vulkan без конструирования графаЗначительно меньше свободы для произвольной последовательности фильтров, условий и форматов.
CupscaleБыстрый GUI для ESRGAN/Real-ESRGAN-подобного апскейла и практических пакетных задачФокус уже: сложные условные графы, маски, PBR-цепочки и вычислительная логика не являются основной моделью работы.
Real-ESRGAN GUIПользователям, которым нужен понятный интерфейс вокруг конкретного семейства super-resolutionМеньше возможностей комбинировать разные фреймворки и строить многоветвевые алгоритмы обработки.
ComfyUIНодовые генеративные и diffusion-процессы, где апскейл является частью большой AI-схемыДля обычной пакетной обработки изображений интерфейс и экосистема ориентированы прежде всего на diffusion-workflow.
Topaz Photo AIАвтоматическое улучшение фотографий с готовыми коммерческими моделями и минимальной настройкой графаЗакрытая модель работы и меньше контроля над произвольным составом собственных нодовых конвейеров.

ChaiNNer выгоднее, когда одна и та же задача содержит больше, чем увеличить картинку: нужно пройти папку, выбрать ветку по размеру, применить собственную модель, скорректировать цвет, сохранить несколько форматов и сохранить структуру каталогов. Upscayl и похожие программы удобнее, когда такая гибкость не нужна и важен максимально короткий путь до результата.

ComfyUI ближе всего по визуальному принципу, но акцент другой. Если процесс строится вокруг Stable Diffusion, генерации, conditioning и diffusion-моделей, ComfyUI естественнее. Если же основная сущность — существующие изображения, SR-модели, конвертация форматов, spritesheet, normal map и пакетные итераторы, ChaiNNer дает более предметный набор узлов.

Topaz Photo AI подходит пользователю, который предпочитает готовую систему автоматических фотографических улучшений и не хочет подбирать open-source веса. ChaiNNer, напротив, полезен тем, кому важна прозрачная структура процесса и возможность заменить отдельную модель или этап, не меняя весь алгоритм.

Конвертация моделей между PyTorch, ONNX и NCNN

В ChaiNNer есть служебные узлы конвертации, поэтому выбранная модель не всегда обязана исполняться в том формате, в котором была получена. Convert To ONNX преобразует поддерживаемую PyTorch-модель в ONNX, а Convert To NCNN может создать NCNN-представление. Для прямого PyTorch → NCNN конвертер использует ONNX как промежуточный этап, поэтому соответствующая зависимость должна быть установлена.

Конвертацию лучше выполнять как отдельную подготовительную операцию и сохранять результат, а не вставлять ее перед каждым Upscale Image. Это прямо отражено в описании узлов: преобразование модели при каждом запуске тратит время и делает рабочую цепочку зависимой от дополнительных пакетов. Практичная схема — один раз загрузить исходные веса, конвертировать, записать модель, а в основной цепи уже использовать готовый файл.

FP16-конвертация имеет собственные условия. Для PyTorch → ONNX половинная точность зависит от включенного PyTorch FP16 и поддержки модели. Уменьшение точности может экономить память и ускорять инференс, но оно не является косметическим переключателем: если архитектура или оператор не поддерживается, конвертация может завершиться ошибкой или дать модель, которая не работает в выбранном backend.

Не каждая архитектура одинаково хорошо переносится между фреймворками. Если конвертер отказывается работать, это не обязательно ошибка интерфейса. Часто причина — неподдерживаемый оператор, динамическая форма, особенности модели или ограничение целевого runtime. В таком случае надежнее использовать исходный backend или найти нативный вариант весов.

Интерполяция моделей и экспериментальные смеси

В категориях нейросетевых backend есть узлы интерполяции моделей. Их смысл — получить промежуточные веса между совместимыми моделями, а не смешать два уже готовых изображения. Такой прием используют, когда две SR-модели имеют одинаковую архитектурную основу и нужно найти компромисс между их характером: например, между более мягкой и более резкой обработкой.

Интерполяция требует совместимости самих весов. Если архитектуры, размеры тензоров или внутренние слои различаются, математическое смешивание невозможно или бессмысленно. Даже при формальной совместимости результат не гарантирует линейного изменения визуального качества: половина одной и половина другой модели может дать неожиданные артефакты.

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

Поиск узлов, Favorites и быстрый набор цепочки

Каталог ChaiNNer содержит много узлов, поэтому пользоваться им только прокруткой неудобно. Поле поиска позволяет быстро найти Load Image, Upscale Image, Get Dimensions или строковый узел по имени. Часто используемые элементы можно держать в Favorites, чтобы базовые строительные блоки не искать в глубине категории.

При создании связи из существующего разъема интерфейс фильтрует выбор по совместимым типам. Это ускоряет освоение: пользователь не обязан помнить, какие именно узлы принимают модель, изображение или число. Если из выхода Image протянуть линию в пустое место, список кандидатов уже ориентирован на image-входы.

Для больших проектов полезно выработать стабильный набор стартовых элементов: загрузка, просмотр, сохранение, размеры, текстовые шаблоны, модель и основной процессор. Такой набор уменьшает количество механических действий. Но Favorites не заменяет понимание типов: узел может быть любимым, но все равно не подходить к текущему выходу.

Настройка экспорта JPEG, WebP, AVIF и TIFF без лишних потерь

В цепочках суперразрешения формат записи влияет на итог не меньше, чем финальный resize. Если результат должен еще обрабатываться, лучше избегать раннего lossy-сжатия. JPEG, lossy WebP и AVIF уместнее в последней ветке, когда размер, резкость и цвет уже определены. Иначе каждый последующий этап работает не только с изображением, но и с артефактами кодека.

Для JPEG ChaiNNer дает выбор chroma subsampling. 4:4:4 сохраняет цветовую детализацию каждого пикселя и полезен для текста, интерфейсов, ярких контуров и изображений с тонкими цветными линиями. 4:2:0 уменьшает цветовое разрешение и обычно подходит фотографиям, где человеческое зрение менее чувствительно к такой потере. Качество 100 не делает JPEG без потерь и не отменяет преобразование цвета.

WebP в lossless-режиме удобен для промежуточного компактного хранения RGBA, если весь последующий софт корректно поддерживает формат. В lossy-режиме появляется параметр Quality. AVIF также дает качество и выбор 4:4:4, 4:2:2, 4:2:0 или монохромного 4:0:0. Для графики с важными цветными границами сильное subsampling может быть заметнее, чем на фотографии.

TIFF полезен там, где нужна повышенная разрядность. 32-bit float имеет смысл только если сам pipeline использует значения с такой точностью и следующий инструмент их читает. Просто сохранить обычный 8-битный источник в float TIFF не возвращает утраченные уровни и не повышает качество нейросети задним числом.

Альфа-канал: где чаще всего возникают артефакты

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

Separate Alpha в PyTorch-апскейле отделяет геометрию прозрачности от цветовой реконструкции. Это может уменьшить шум в маске, но цвет в полностью прозрачных пикселях и способ композитинга по-прежнему важны. Если следующий инструмент ожидает premultiplied alpha, а цепочка хранит straight alpha, визуальная граница может отличаться.

Для DDS задача усложняется тем, что alpha может означать вовсе не прозрачность. В игровых ресурсах она нередко хранит roughness, metalness, gloss или другую маску. В таком случае настройки mipmap должны сохранять этот канал как данные. ChaiNNer предусматривает Separate Alpha for MipMaps, но пользователь должен знать семантику конкретной текстуры.

При удалении фона ONNX-модель создает маску, которую полезно посмотреть отдельно. Если маска хорошая, а RGBA выглядит плохо после дальнейших фильтров, проблема уже не в сегментации. Такой способ диагностики быстрее, чем менять модель вырезания после каждого неудачного экспорта.

Размеры, соотношение сторон и цепочки с несколькими целевыми форматами

Одна из сильных сторон графа — возможность получить несколько целевых размеров без повторного нейросетевого расчета. Например, 4× мастер-результат после color fix можно развести в ветку 2560 px для публикации, 1280 px для превью и PNG-мастер. Все три результата основаны на одном SR-вычислении, а параметры Resize и экспорта независимы.

Если конечный размер известен заранее, не всегда имеет смысл сохранять полный 4×. Для маленького исходника модель можно использовать как этап восстановления, затем уменьшить к нужному размеру. Downscale часто сглаживает часть мелких артефактов и дает более естественную финальную резкость. Однако слишком сильный overscale напрасно расходует время и VRAM.

При сохранении соотношения сторон следует избегать независимого округления ширины и высоты в нескольких местах. Лучше вычислить один коэффициент или одну целевую сторону и дать Resize сохранить пропорции. Для видео после вычисления можно дополнительно округлить обе стороны к четным значениям.

Проверка модели на небольшой контрольной выборке

Перед массовым запуском полезно выбрать несколько файлов, которые представляют разные трудные случаи: мелкий текст, лица, волосы, ровные градиенты, шум, полупрозрачность, повторяющиеся узоры и крупные одноцветные области. Одна красивая фотография не показывает, как модель ведет себя на всей папке.

Use limit в Load Images ускоряет техническую отладку, но первые десять файлов не обязательно являются хорошей визуальной выборкой. Для осознанного сравнения лучше временно собрать отдельную тестовую папку с характерными примерами. После выбора модели цепочка возвращается к основной директории без изменения downstream-логики.

Сравнивать нужно при одинаковом конечном размере. 4× изображение почти всегда воспринимается детальнее, чем 2×, просто потому что оно больше на экране. Если задача — получить 2000 px по длинной стороне, все варианты надо привести к этим 2000 px и только потом сравнивать фактуру, ореолы и геометрию.

Почему одна модель хорошо работает на одном типе изображений и плохо на другом

Super-resolution-модель обучается на определенном распределении данных и искажений. Модель для фотографий ожидает статистику реальных текстур, шума и оптики; аниме-модель — чистые контуры и заливки; модель для JPEG restoration может агрессивно подавлять блочные артефакты. ChaiNNer не меняет это свойство: он только дает общий исполнительный каркас.

Если модель слишком творческая, она может дорисовывать кирпич, волосы и текстуру кожи правдоподобно, но неверно. Если слишком консервативная — результат будет близок к качественной интерполяции и может казаться мягким. Поэтому назначение проекта определяет допустимый уровень реконструкции. Для архива важна верность; для ремастера игры иногда важнее визуальная убедительность.

В пакетной обработке опаснее всего скрытые исключения: одна модель отлично работает на 95% файлов и ломает тонкие линии на остальных 5%. Условия по размеру помогают технически, но не распознают семантику. Такие коллекции разумно предварительно сортировать или прогонять контрольные листы результатов.

Ошибки путей, имен и доступа к файлам

Проблемы с записью не всегда связаны с кодеком. DirectoryInput, RelativePathInput и имя файла проходят проверку, а относительные пути должны оставаться корректными. Если строковая логика формирует путь из имени модели или исходника, специальные символы могут быть недопустимы для файловой системы.

Выходной каталог можно создавать автоматически, но базовый путь должен быть доступен для записи. Если цепочка пишет в сетевую папку, синхронизируемый каталог или защищенное системное место, ошибка доступа может появляться только на этапе Save Image. Для диагностики временно выберите простой локальный каталог и повторите тот же узел.

При пакетной обработке одинаковые имена из разных подкаталогов безопасны только если вы сохраняете Subdirectory Path. Если все результаты отправляются в одну папку, файлы могут перезаписывать друг друга. Skip existing files предотвратит перезапись, но тогда часть результатов просто не будет создана. Поэтому коллизии лучше решать схемой именования.

Что учитывать при переносе цепочки на другой компьютер

Файл .chn переносит структуру графа, но не встраивает в себя внешние модели и исходники. На новом компьютере должны существовать совместимые зависимости, а пути к весам и каталогам — быть исправлены. Если использовалась интегрированная среда Python, ChaiNNer развернет ее самостоятельно, но пакеты backend придется установить через Dependency Manager.

Цепочка, построенная под CUDA, может потребовать другой backend на системе без NVIDIA. Это не всегда решается сменой одной настройки: модель PyTorch и модель NCNN являются разными представлениями. Если переносимость важна заранее, полезно хранить сконвертированные варианты и документировать, какой узел нужно заменить.

Относительная структура проектов уменьшает объем ручной работы, но ChaiNNer не является системой управления пакетами моделей. Для командной работы имеет смысл хранить отдельный текстовый список необходимых весов и их назначение, не помещая сами крупные файлы внутрь статьи или цепочки.

Частые вопросы о ChaiNNer

Нужен ли Python заранее?

Нет. Для обычного запуска ChaiNNer сам разворачивает изолированную интегрированную среду Python и управляет зависимостями через Dependency Manager. Системный Python можно использовать отдельно, но это вариант для тех, кому нужен полный контроль над пакетами и кто готов самостоятельно решать вопросы совместимости.

Где брать модели?

ChaiNNer исполняет совместимые модели, но не подменяет собой каталог весов. В сообществе часто используют OpenModelDB и другие репозитории моделей. Перед применением проверяют архитектуру, масштаб, число каналов и назначение конкретных весов. Название файла само по себе не гарантирует, что модель подходит фотографии или аниме.

Можно ли использовать Real-ESRGAN?

Да, поддерживаемые варианты Real-ESRGAN и ESRGAN-подобных SR-моделей относятся к типичным сценариям. Конкретный файл должен распознаваться выбранным backend. Если архитектура не поддерживается, одно только расширение .pth не делает модель совместимой.

Можно ли увеличить 4× моделью только в 2×?

В PyTorch Upscale Image для подходящих моделей доступен Custom Scale. Если заданный масштаб меньше базового, ChaiNNer выполняет нейросетевой апскейл, а затем приводит результат к нужному коэффициенту. Это не эквивалент модели, обученной напрямую на 2×, поэтому качество имеет смысл сравнить.

Можно ли получить 8× из 2× модели?

Для поддерживаемого custom scale модель может применяться повторно. Три последовательных 2× прохода дают 8×. Но каждый повтор усиливает не только полезные детали, но и характерные артефакты, поэтому большой коэффициент не означает пропорционального роста качества.

Что делать с прозрачным PNG?

Проверьте, поддерживает ли модель нужные каналы. Для RGBA в PyTorch-апскейле может появляться Separate Alpha, который обрабатывает прозрачность отдельно. После обработки сохраняйте в формат, поддерживающий альфа-канал, и обязательно проверяйте края на темные ореолы.

Почему результат имеет другой цвет?

Некоторые модели меняют распределение цвета и контраста. Попробуйте Average Color Fix или Wavelet Color Fix с исходником как reference. Если изменение цвета было частью художественного замысла, такой узел, наоборот, может быть лишним.

Можно ли обрабатывать целую папку?

Да. Load Images проходит по изображениям, умеет работать рекурсивно или по WCMatch-выражению, ограничивать число тестовых файлов и передает имя, индекс и относительный путь для дальнейшего сохранения. Это один из основных сценариев ChaiNNer.

Можно ли пропускать уже готовые файлы?

В Save Image есть Skip existing files. Он удобен для дозапуска папки, но ориентируется только на существование целевого файла. Если вы изменили модель или параметры, старый результат все равно будет пропущен, поэтому для новой конфигурации лучше использовать другой суффикс или каталог.

Можно ли обрабатывать видео со звуком?

Да. Load Video может дать аудиопоток, который подключается к Save Video. Звук можно копировать или перекодировать, если выбранный контейнер это допускает. При проблемах полезно сначала сохранить только видео и отдельно проверить совместимость аудиоформата.

Можно ли заменить FFmpeg?

Для простой перекодировки — не стоит. Сам Save Video использует FFmpeg, а описание узла предупреждает, что покадровый путь через ChaiNNer намного медленнее обычной конвертации. ChaiNNer оправдан, когда каждый кадр действительно проходит фильтры или нейросеть.

Работает ли ChaiNNer на CPU?

Да, backend может использовать CPU, а PyTorch имеет явную опцию Use CPU Mode. Это полезно для совместимости и небольших задач. Но тяжелое super-resolution, особенно для видео и крупных исходников, на CPU обычно занимает существенно больше времени, чем на подходящем GPU.

Что выбрать при недостатке VRAM?

Первым делом уменьшите tile size. Затем рассмотрите FP16 для совместимой модели и ограничение memory budget. Если памяти не хватает из-за одного особенно крупного файла в пакете, обработайте его отдельно с меньшей плиткой, а не ухудшайте параметры для всей серии.

Почему линии на схеме не соединяются?

Обычно типы несовместимы или редактор не допускает конкретное сочетание итераторов. Проверьте ожидаемый тип входа, число каналов изображения и контекст итерации. Если протянуть соединение в пустое место, контекстный список помогает увидеть совместимые узлы.

Можно ли условно пропускать апскейл?

Да. Получите размер через Get Dimensions, сравните его через Compare и используйте Conditional. Невыбранная ветка не вычисляется, поэтому изображения, уже достигшие требуемого размера, могут обходить тяжелый SR-узел.

Можно ли запускать цепочку из скрипта?

Да, через CLI-команду run. Для text, number, file и directory inputs предусмотрены input overrides. Но CLI обозначен как экспериментальный режим, поэтому для критичной автоматизации нужно учитывать возможность изменений и обязательно обрабатывать код завершения.

Подходит ли ChaiNNer для старых фотографий?

Подходит как конструктор процесса: можно применить SR, восстановление лиц, коррекцию цвета, резкость и экспорт. Но нейросеть реконструирует недостающие детали вероятностно. Если важна документальная точность, исходный скан следует хранить отдельно, а обработанную копию считать реконструкцией.

Что лучше сохранить как мастер-файл?

Если дальнейшая обработка продолжается, выбирайте формат без потерь и достаточную разрядность: PNG или TIFF в зависимости от задачи. Финальный JPEG, WebP или AVIF удобнее создавать отдельной веткой, чтобы lossy-сжатие не становилось источником для следующих этапов.

Нужно ли ставить все backend одновременно?

Нет. Устанавливайте PyTorch, NCNN, ONNX или TensorRT в соответствии с реальными моделями и цепочками. Лишние пакеты не повышают качество. Дополнительная зависимость нужна, только если вы используете конкретный узел, например ONNX как промежуточный этап конвертации в NCNN.

Как понять, что проблема именно в модели?

Соберите минимальную цепь Load Image → Upscale Image → View Image с тем же файлом и моделью. Если ошибка сохраняется без пакетного итератора, строковых узлов и экспорта, круг причин резко сужается. Затем проверьте другую известную совместимую модель на том же backend.

Можно ли оставить часть цепочки выключенной?

Да. Для временного эксперимента узлы можно выключать или пропускать. Skip удобен, когда нужно сохранить поток данных дальше по цепи. Если альтернативная ветка больше не нужна, лучше удалить ее или вынести в отдельный .chn, чтобы граф не превращался в набор неясных вариантов.

Как выбрать ChaiNNer для конкретной задачи

Для одного изображения и одной модели ChaiNNer может казаться избыточным: простому апскейлеру достаточно поля входа, выбора масштаба и кнопки запуска. Преимущество нод проявляется, когда к апскейлу добавляется хотя бы несколько условий: разные исходные размеры, несколько выходных форматов, сохранение структуры каталогов, прозрачность, цветовая коррекция или тест нескольких моделей.

Для архивной реставрации полезна возможность держать исходник отдельной веткой и использовать его как reference, а все реконструирующие узлы явно видеть на схеме. Для игровых ресурсов важнее DDS, normal map, spritesheet и пакетные пути. Для видео ценность заключается в применении image-цепочки к последовательности кадров, а не в монтажных или временных эффектах.

Если основная задача — генерация новых изображений diffusion-моделью, ChaiNNer обычно не является первым выбором. Если задача — обработать уже существующие изображения и точно контролировать, как они проходят через модель, фильтры, условия и экспорт, его архитектура подходит значительно лучше.

Итог

ChaiNNer раскрывается не как одна нейросетевая кнопка, а как визуальная среда для сборки повторяемых процессов. Он позволяет связать загрузку, super-resolution, маски, условную логику, работу со строками, обычные фильтры, пакетные итераторы и экспорт в один граф. За это приходится платить более высоким порогом входа: нужно понимать модель, backend, расход памяти и форматы.

Для единичного увеличения изображения проще программа с фиксированным интерфейсом. Для задач, где одни и те же шаги повторяются на папках, моделях, текстурах или кадрах видео и результат должен формироваться по четким правилам, нодовый подход ChaiNNer экономит ручную работу и делает процесс воспроизводимым.

Практически лучший способ освоить ChaiNNer — сохранить несколько коротких цепочек по назначению, а не сразу строить универсальный комбайн. Отдельный граф для фотографий, отдельный для прозрачной графики, отдельный для DDS-текстур и отдельный для видеокадров легче проверять и переносить. Общие приемы — именование, пакетный вход, расчет размеров — повторяются, но модели и правила экспорта остаются специфичными для контента.

Если процесс должен использоваться долго, фиксируйте назначение модели в имени узла и имени выходного файла, а критические числовые параметры выводите в заметные места графа. Тогда через несколько месяцев цепочка остается понятной без восстановления логики по десяткам соединений. В этом и состоит главная практическая ценность ChaiNNer: один раз явным образом описать последовательность обработки и затем повторять ее без ручного воспроизведения каждого шага.