Ограничения запуска SD WebUI для Google Colab

Что случилось

С 21 апреля Google Colab запретил использование удалённых пользовательских интерфейсов. Таким образом, если вы будете пытаться использовать Stable Diffusion через Colab, вы рискуете получить бан своей учетной записи.

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

Как ограничения работают на практике

Актуальность

Данная информация актуальна на состояние 8 июня 2023 года. Вполне вероятно, что гугл, в будущем, будет менять механику работы фильтров, если число пользователе WebUI превысит определённую отметку.

На текущий момент, гугл никак не ограничивает запуск WebUI. Единственным достоверно-известным нововведением касательно StableDiffusion, введённым после изменения лицензионного соглашения, было добавление модалки со следующим содержанием, при случае, если вы пытаетесь запускать ноды, как-либо связанные с WebUI:

По сути, вас будут предупреждать о том, что, исполняя код в текущей ячейке коллаба, вы, возможно, нарушаете условия использования и ваш инстанс коллаба может быть приостановлен. При нажатии на "Continue anyway" код будет исполнен без каких-либо блокировок.

Что под капотом фильтра

Нет возможности достоверно выяснить, осуществляет ли гугл какой-либо мониторинг на тему запуска WebUI со стороны бекенда. Однако, со стороны фронтенда за фильтрацию осуществляет следующий код, расположенный в файле external_polymer_binary.js.

Открыть картинку в полном размере

Отформатированный список фильтров:

1
2
3
4
5
6
var b = [
  "stable-diffusion-webui",
  "stable-diffusion-$blasphemy",
  "/sd-webui/",
  "/sd-webui-"
],

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

  1. Коллаб не использует вебсокеты, а, значит, кроме HTTP-запросов нет другого механизма передать информацию о нарушениях
  2. Коллаб не посылает дополнительные запросы при игнорировании модалки
  3. Коллаб посылает большое количество данных вместе с каждым запросом, так что есть ненулевая вероятность того, что эта информация может передаваться в каком-то из HTTP-запросов при запуске ноды
  4. Не удалось найти в коде каких-либо свидетельств того, что прокликивание "Continue Anyway" в модалке как-либо влияет на дальнейшую логику

Необходимо учитывать то, что любой из вышеупомянутых пунктов может стать ложным в любой момент при последующих обновлениях фронтенда для коллаба. В связи с этим, желательно не допускать прокликивания "Continue Anyway" в данной модалке.

Способы отключения модалки

Маскировка упоминаний WebUI в коде колаба

Фильтр проверяет текст программы на наличие определённых строк, таких как stable-diffusion-webui. Для обхода фильтра достаточно разбить подобные строки на несколько отдельных строк, либо закодировать их. Всё, что вам нужно - это добиться того, чтобы ни одна строка из фильтра не встречалась в тексте программы целиком:

print('stable-diffusion-webui') # эта строка стриггерит фильтр
print('stable' + '-diffusion' + '-webui') # эта строка обойдёт фильтр

https://colab.research.google.com/drive/163drleqYf41Gsy9UsAWQrolS-O9J7Dn4?usp=sharing - в этом коллабе вы можете убедиться, что такой примитивный приём отключает фильтры.

Список всех строк, которые фильтр пытается найти в настоящий момент:

1
2
3
4
stable-diffusion-webui
stable-diffusion-$blasphemy
/sd-webui/
/sd-webui-

Кроме простого сложения строк, вот ещё пара вариантов, как их можно замаскировать:

  1. Грузить строки из внешнего источника (raw-файлы с pastebin/github)
  2. Закодировать строки в base64 и декодировать их в моменты, когда это необходимо

Юзерскрипт для отключения фильтров на стороне фронтенда

https://rentry.org/sd_collab_filter_bypass - юзерскрипт для отключения фильтра SD со стороны фронта
https://colab.research.google.com/drive/163drleqYf41Gsy9UsAWQrolS-O9J7Dn4?usp=sharing - коллаб для теста фильтров

Приведённый выше юзерскрипт осуществляет следующие манипуляции:

  1. На любой странице колаба он перехватывает скачивание файла external_polymer_binary.js
  2. При скачивании данного файла он модифицирует его таким образом, чтобы обнулить секцию фильтров:
    1
    2
    3
    4
    5
    // было
    var b = ["stable-diffusion-webui","stable-diffusion-$blasphemy","/sd-webui/","/sd-webui-"],
    
    // стало
    var b = [],
    
  3. Модифицированный файл подключается на страницу
Инструкция для хлебушков

Юзерскрипт - это программа, написанная на языке JavaScript, хранящаяся на компьютере пользователя и подключаемая браузером на определенных страницах.

При подключении к странице юзерскрипт выполняется так же, как и обычный javascript код, присланый сервером. У юзерскрипта есть доступ к DOM-дереву страницы, в контексте которой он выполняется, а, так же, у него есть доступ к localStorage и прочим HTML5 API.

Опасность юзерскриптов

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

  1. Убедитесь, что скрипт разрешён к выполнению только на страницах колаба. Если в @match/@include секции скрипта есть что-то помимо https://colab.research.google.com/*, то это повод насторожиться
  2. Убедитесь, что скрипт не осуществляет какие-либо запросы на сторонние ресурсы. В контексте задачи отключения фильтра это было бы излишним
  3. Если скрипт поддерживает обновление посредством определения секции @updateURL, рекомендуется осуществлять проверку вышеупомянутых двух пунктов после каждого обновления (сами обновления осуществляются вручную)

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

Как установить юзерскрипт для отключения фильтров коллаба на стороне фронтенда:

  1. Поставь расширение Tampermonkey для своего браузера
  2. Нажми на иконку расширения и выбери "Create a new script"
  3. Скопируй и вставь в редактор тело юзерскрипта и сохрани изменения (нажми Ctrl + S)
  4. Готово

Если ты всё сделал правильно, то при переходе на страницу Dashboard, ты увидишь скрипт "SD Colab Filter Bypass" в списке:

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

Чтобы убедиться в корректной работе скрипта, попробуй запустить верхнюю ноду в данном коллабе. Эта нода влючает в себя все слова-триггеры для фильтров. Если ты всё сделал правильно (и логика работы скрипта не поломалось с очередным обновлением фронтенда колаба), то программа должна выполниться без предупреждения о том, что вы выполняете запрещённый код.

Edit
Pub: 05 Jun 2023 20:43 UTC
Edit: 08 Jun 2023 01:40 UTC
Views: 981