Tessera: тайловый апскейл видео 4K и 8K для MiniMax H3
Tessera это набор узлов ComfyUI, который уточняет клипы MiniMax H3 тайл за тайлом до 2K, 4K и 8K, с условиями для каждого тайла и потоковым VAE.
H3 хорошо справляется с короткими клипами в 544p, но обходится дорого выше этого разрешения. Существующие пути к более высокому разрешению либо перегенерируют кадр в большем размере и мирятся с более медленным и менее стабильным проходом, либо увеличивают пиксели и теряют детали. Tessera выбирает третий путь: сохраняет исходный клип как референс, который модель уже понимает, увеличивает изображение нейтральным ресемплером и позволяет H3 заново отрендерить каждый тайл этого полотна при точном локальном условии.
Пак поставляется как обычные ноды ComfyUI без дополнительных зависимостей, версия 1.0.0, а его pyproject.toml содержит блок [tool.comfy] (DisplayName = "Tessera", PublisherId = "hashu786") для публикации в Comfy Registry.
![]() | ![]() |
|---|---|
| Исходный клип в 544p | Рендер 3840x2176 из промо-видео проекта |
Тайлы, привязанные к основе, а не друг к другу
Очевидный способ уточнить большой латентный тензор по частям: пройти тайлы по порядку и позволить каждому унаследовать готовую границу соседей. Автор Tessera измерил, почему это не работает с H3: дрейф совмещения накапливается вдоль ряда, составляя +1.5, -2.1, -9.3 и -15.5 px на четырёх тайлах, потому что каждый тайл обусловлен догадкой предыдущего тайла, а не источником.
Tessera меняет зависимость на обратную. Каждый тайл проходит денойзинг относительно собственных кропов одного и того же эталона:
- Ссылки DiT обрезаются до окна тайла и отображаются на латентную сетку этого окна, так что видеоссылка и опциональная ссылка на изображение показывают патч кадра этого тайла, а не весь кадр.
- Текст перекодируется из собственного кропа тайла, если подключён вход
clip. Без него штатная нода-ссылка передаёт Qwen весь кадр, и каждому тайлу сообщается о субъекте, которого в нём может не быть; в заметках это называют ghost-subject failure (ошибка субъекта-призрака). - Гиды остаются на точной сетке основы, и нода сразу выдаёт ошибку, если они не совпадают.
Тайлы также используют одно глобальное поле шума, а не генерируют шум отдельно для каждого тайла; полосы вдоль шва генерируются обоими соседями с полосой seam_regen в 32 px, а затем смешиваются через взвешенно-нормализованное накопление. Два тайла, которые оба видели полосу, дают точный кроссфейд между рендерами вместо призрачного смешения.
Расписание: один шаг головы и два шага хвоста
Сигмы по умолчанию: 1.0, 0.7, 0.4, 0.0. Это один шаг с дистиллированной turbo-головой, затем два шага euler в тонком хвосте. Внутриполосный гайд рассматривается как спектральный клэмп, поэтому он зашумляется только для хвоста (guide_release 0.8), а не на всём прогоне. Голова решает структуру при полной информации, хвост добавляет текстуру при свободе, а к моменту передачи уже зафиксировано достаточно сигнала, чтобы содержимое не могло сдвинуться.
По измерениям на референсном клипе автора эта комбинация даёт +67% локальной детализации тайла относительно базовой линии с замороженной границей при шиммере, близком к базовому, а переключение идентичного расписания с LMS на euler дало +56% детализации при сокращении шиммера примерно на треть. Два шага головы хуже, а не лучше: это сводит состояние к мягкому гайду и стоит 21% детализации, а дистиллированная turbo-модель, прошедшая два шага через средние сигмы, в одном измеренном прогоне выдала NaN в латент.
Тайлы без признаков пропускаются, а не подвергаются выборке. Кроп ровной пластины даёт модели ноль информации и полную свободу, и автор поймал её на том, что она закрашивала референсное лицо в пустое небо и дым, причём хуже, когда было включено повторное кодирование текста для каждого тайла. flat_skip (по умолчанию 4.0) сохраняет пластину в этих окнах и возвращает время выборки. Решение принимается для каждого тайла и каждого чанка по энергии пикселей источника, поскольку две метрики в латентном пространстве были опровергнуты подряд.
Потоковая обработка того, что не помещается
При 4x 15-секундный клип занимает около 36 ГБ как ComfyUI IMAGE в float32 на каждую копию, а обычный граф держит три копии плюс два кодирования всего клипа целиком. Это приводит к OOM на любой GPU, поэтому Tessera разделяет работу:
- Streamed Encode выполняет upscale и VAE-кодирование источника во временных окнах по сетке блоков H3 размером 17 px, с повторным кодированием прогрева 22 px на каждое окно, которое затем отбрасывается. В проверенном прогоне от 544p до 4K пиковый буфер пикселей на стороне кодирования составил около 5,2 ГБ против 57,6 ГБ для копии всего клипа, которая вызывала OOM в обычном графе.
- Streamed Decode собирает выход за одно потоковое декодирование, с буфером на диске при объёме свыше 4 ГБ. Ранее холст 8K из 124 кадров падал при выделении 49,7 ГБ в монолитном декодировании.
- Проверка диска (disk preflight) выполняется до первой выборки тайла, поскольку потребность декодирования во временном пространстве известна уже на этапе планирования. Один прогон выборки 8K уже потратил 8 часов 49 минут, прежде чем не смог выделить буфер 67,6 ГБ.
- Страховка от сбоев: если этап выхода всё же падает, уточнённый латентный сохраняется как
tessera_rescue_<timestamp>.latent, и граф всё равно возвращает латентный, поэтому LoadLatent вместе с потоковым декодером восстанавливает рендер без повторной выборки.
Длинные клипы с быстрым движением проходят через Temporal Dilate / Decimate, который повышает частоту кадров на интервал и заново рассчитывает тайминг выхода на обратном пути. Окна чанков рассчитываются в реальных секундах содержимого: dilation делит содержимое в каждом окне, поэтому временное окно масштабируется вместе с коэффициентом dilation, чтобы сохранить одинаковое количество структуры движения на окно. Планировщик также привязывает начало каждого окна в середине интервала к кратному 5 латентным, что соответствует собственной токенной синхронизации H3: один головной токен, затем четыре кадра на токен. Такое решение приняли после 15-секундного теста, показавшего мерцающий метроном с шагом 17-пиксельных кадров через каждый невыровненный чанк.
Замеренные прогоны
Эталонный прогон автора для пути от 544p до 4K: 15-секундный клип, 617 дилатированных кадров, 18 окон, 24 тайла в 3 выровненных чанках, 3 часа в общей сложности на одной GPU. Покадровая осцилляция составила 2,44% в среднем и 16,1% в пике против 2,32% и 12,3% у эталонного прогона того же клипа в 2x, при этом в автокорреляции не осталось сигнатуры 17 кадров.
Прогоны, опубликованные в Banodoco Discord на следующий день после релиза, от людей, не являющихся автором:
- LDWorks David, RTX 6000 Pro с весами BF16: 121 кадр, от 2K до 4K, 84 шага refine при примерно 32 с/шаг, 44 минуты до достижения 93%.
- seitanism: 1344x768, 362 кадра, дилатированные по времени до 583 кадров и отрендеренные в 2688x1536 за 46:58; второй клип от 1920x1088 до 3840x2176 за 53:08; третий с кадром-якорем Qwen-Image 2.1 за 27:48. Его оценка: это не исправляет все артефакты движения, но держится достойно.
- mdkb, на 12 GB RTX 3060, протестировал его на соответствие собственному 20-минутному бюджету и попросил рецепт для карт с низким VRAM. Автор ответил, что такой ещё впереди: поставляемые по умолчанию настройки ориентированы на карты с высоким VRAM.
Использование ComfyUI
Установите, клонировав репозиторий в ComfyUI/custom_nodes/. При запуске консоль выводит [Tessera] loaded 9 node(s), когда всё зарегистрировано.
| Нода | Что делает |
|---|---|
| Tessera Tile Plan | пробный прогон: сетка тайлов, раскладка чанков и стоимость ДО траты времени GPU |
| Tessera Streamed Encode | источник в латентный plate плюс guide-условие, во временных окнах |
| Tessera Refine | плиточный рефайнер с условием для каждого тайла, чанкингом, hero-тайлами, пропуском плоских тайлов и выходом с защитой от падений |
| Tessera Streamed Decode | автономный потоковый декодер, а также путь восстановления для спасённых латентов |
| Tessera Guide Anchor | вставляет детальный стоп-кадр в тонкую полосу гида, с коррекцией сдвига и распространением по потоку |
| Tessera Temporal Dilate / Decimate | дилатация частоты кадров по отдельным промежуткам и точное перетаймирование |
| Tessera Guide Grain | согласованное зерно для гида |
| Tessera Extra Options | экспертные настройки с проверенными значениями по умолчанию |
Входящий в комплект рабочий процесс подключает исходный клип как H3-ссылку, Lanczos plate в выбранном масштабе, опциональный анкор первого кадра Qwen-Image 2.1 и пару LoRA, которую автор использует как фирменный рецепт (LMS detail LoRA из H3-пака Alissonerdx и 3-step turbo LoRA). Он нацелен на 4x при источнике 544p, с итогом 3840x2176.
Нода Tile Plan в промо-видео: сетка, чанки и прогнозируемая стоимость ДО запуска.
Модели, используемые в примере: MiniMax H3 ref2va (урезанная int8-сборка в конфигурации автора), видео- и аудио-VAE для H3, текстовый энкодер Qwen3-VL, а также опциональный checkpoint Qwen-Image 2.1 с его turbo LoRA и texture-fix VAE для анкорного стоп-кадра. Рабочий процесс также требует пакеты узлов SAM3 и KJ для опциональной hero-маски и узлов предпросмотра.
Ограничения, о которых стоит знать
- Пример настроен на одну цель. Ожидаемый размер выхода и коэффициент масштабирования задаются отдельными виджетами; оба должны соответствовать клипу, который вы загружаете. Один тестировщик в Discord запустил готовый рабочий процесс на другом клипе, ожидая 2x, и получил холст 4K, который, по его оценке, был хуже источника.
- Опорное изображение (still anchor) рассчитано на 2x. На 4x и выше примечания рекомендуют оставлять его неподключённым и позволять модели рендерить начальный фрагмент, поскольку при сращивании выполняется кроссфейд между двумя разными вариантами рендеринга одной и той же текстуры.
- Мерцание источника наследуется. Источник низкого разрешения, у которого собственная мелкодетальная составляющая «кипит», после апскейла превращается в увеличенное «плавание»: уточнение поднимает когерентность примерно до 0,75 и не может превысить этот уровень.
- Склейки сцен носят рекомендательный характер. Оракул склеек выводит найденные кадры и рекомендует разделить клип в этих местах; короткие планы внутри одного окна не могут одновременно соответствовать и правилу тайминга начала, и бюджету времени содержимого.
- Вторые проходы входят при уменьшенной sigma, например
1.0, 0.923, 0.55, 0.0, а опорное изображение второго прохода должно быть выходом первого прохода, а не повторно смягчённым промежуточным результатом.
Доступность
- hashu786/ComfyUI-Tessera на GitHub, с
example_workflows/tessera_upscaler.jsonи полными инженерными заметками вdocs/LAWS.md pyproject.tomlсодержит блок[tool.comfy]для Comfy Registry (DisplayName = "Tessera"); на момент сканирования пакет там ещё не был опубликован, поэтому устанавливайте его из репозитория- Референсные кадры в этой статье это кадры из промо-видео проекта, в котором сравнивается источник 544p с 4x-рендером


Комментарии
Войдите через GitHub, чтобы участвовать в обсуждении.