Wednesday, 30 August 2023

ROOP и ComfyUI.

Всем привет.

Существует определенная проблемка с популярным расширением ROOP как для A1111 так и для ComfyUI. Особенности его установки заключаются в том что оно требует предварительной, хотя и одноразовой, компиляции своих пакетов с MS VС++. Не могу сказать почему автор не задейстовал его с МS VC++ Redistributable, но реальность такова что для его нормальной работы необходимо доустанавливать как минимум Visual Studio Build Tools.

Вот один любитель Stable Diffusion посвятил этому отдельное видео.


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

### ComfyUI-FaceSwap: Check basic models

Traceback (most recent call last):

  File "C:\SDComfyUI\ComfyUI\nodes.py", line 1693, in load_custom_node module_spec.loader.exec_module(module)

  File "<frozen importlib._bootstrap_external>", line 883, in exec_module

  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed

  File "C:\SDComfyUI\ComfyUI\custom_nodes\ComfyUI-FaceSwap\__init__.py", line 4, in <module>     from .FaceSwapNode import FaceSwapNode

  File "C:\SDComfyUI\ComfyUI\custom_nodes\ComfyUI-FaceSwap\FaceSwapNode.py", line 1, in <module>  import insightface

  File "C:\SDComfyUI\python_embeded\lib\site-packages\insightface\__init__.py", line 18, in <module> from . import app

  File "C:\SDComfyUI\python_embeded\lib\site-packages\insightface\app\__init__.py", line 2, in <module> from .mask_renderer import *

  File "C:\SDComfyUI\python_embeded\lib\site-packages\insightface\app\mask_renderer.py", line 8, in <module> from ..thirdparty import face3d

  File "C:\SDComfyUI\python_embeded\lib\site-packages\insightface\thirdparty\face3d\__init__.py", line 3, in <module> from . import mesh

  File "C:\SDComfyUI\python_embeded\lib\site-packages\insightface\thirdparty\face3d\mesh\__init__.py", line 9, in <module> from .cython import mesh_core_cython

ImportError: DLL load failed while importing mesh_core_cython: The specified module could not be found.

Friday, 25 August 2023

Более одного RDP сеанса в Windows Desktop.


Всем привет.

Удаленные пользователи или администраторы могут подключаться к своим компьютерам Windows 10 или 11 через службу удаленных рабочих столов (RDP). Достаточно включить удаленный рабочий стол (Remote Desktop), разрешить RDP доступ для конкретного пользователя и подключиться к компьютеру с помощью любого клиента удаленного рабочего стола. Однако в десктопных версия Windows есть ограничение на количество одновременных RDP сессии. Разрешается только один активный Remote Desktop сеанс пользователя. Не совсем удобно, особенно если вам надо что-то поправить не выгоняя самого пользователя из-за стола Windows.

Ограничение на количество одновременных RDP подключений в Windows является не техническим, а программным и лицензионным. Таким образом Microsoft запрещает создавать терминальный RDP сервер на базе рабочей станции для одновременной работы нескольких пользователей.

Если ваши задачи требуют развертывание терминального сервера, Microsoft предлагает пробрести Windows Server (по умолчанию разрешает 2 активных RDP подключения). Если вам нужно большее количество одновременных сессий пользователей, нужно приобрести лицензии RDS CAL, установить и настроить роль Remote Desktop Session Host (RDSH) или полноценную RDS ферму.

Технически любая редакция Windows при наличии достаточного ресурсов оперативной памяти и CPU может обслуживать одновременную работу нескольких десятков удаленных пользователей. В среднем на одну RDP сессию пользователя требуется 150-200 Мб памяти (без учета запускаемых приложений). Т.е. максимальное количество одновременных RDP сессий в теории ограничивается только ресурсами компьютера.

На сегодня существуют три способа убрать ограничение на количество одновременных RDP подключений в Windows 10 и 11:

  • использование RDP Wrapper
  • модификации системного файла termsrv.dll
  • апгрейд до редакции Windows 10/11 Enterprise for virtual desktops (multi-session).

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

Апгрейд до редакции Windows 10/11 Enterprise for virtual desktops (multi-session) довольно свежий метод, но сомневаюсь что ваша "новая" лицензия продержится валидной достаточно долго. Только если вы ее честно купили.

Поэтому считаю что самый верный способ это модификация файла termsrv.dll для снятия ограничений RDP в Windows 10 и 11. Тем более что вы сами ее выполните, правда придеться повозиться.

Thursday, 24 August 2023

GPO and Item-level targeting.

Hi All,

as you know, Item-level targeting can use to target group policy preference settings based on application settings and properties of users and computers in granular level. We can use multiple targeting items in preference settings and make selections based on logical operators (AND, OR, IS, IS NOT).

Item-level targeting in group policy preferences can setup/manage using GPMC. To do that open the group policy settings > Go to relevant Preference settings > right click and select properties.

In my example I am using GPO created for IE 10 Settings, there for the path for it is User Configuration > Preferences > Internet Settings > Internet Explorer 10. Then right click and select properties. 

From properties window, then select Common tab > tick item-level targeting > then click on Targeting button. 


In next window, we can build granular level targeting based on one item or multiple items with logical operators. 


In above example I have built a query based on three setting which is NetBIOS name, Operating System and IP address. In order to apply the preference setting, all three statements should give TRUE value as result as I used AND logical operator. If its OR logical operator the result can have True or False values. 

In the window, New Item menu contained items we can use of targeting. Add Collections allows to create parenthetical grouping. Item Options menu is responsible for defining logical operators. 

As you remember, I early tried to do it by WMI Filters. However WMI filters don't have result by logical AND, so I will prefer to do it by Item-level targeting.

Good luck.

Monday, 21 August 2023

Жесткие и символические ссылки в Windows.

Всем привет.

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

Жесткие и символические ссылки давно знакомы и активно используются Linux-администраторами, в то время как их Windows коллеги используют их гораздо реже, а некоторые вообще не знают о такой возможности. Тем не менее такая возможность в Windows существует и позволяет значительно упростить некоторые сценарии работы с папками и файлами. Сегодня мы рассмотрим все виды ссылок, доступные в среде ОС Windows, а также разные способы работы с ними, начиная от командной строки и заканчивая PowerShell.

Жесткие ссылки (HardLink)

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

Мы можем переименовывать, копировать, перемещать (в пределах логического тома) ссылки - размер занимаемого места при этом не изменится. При удалении ссылок файл продолжает существовать до тех пор, пока не будет удалена последняя жесткая ссылка на него. Фактически отличить, где находится оригинальный файл, а где жесткая ссылка невозможно, по сути, файл на разделе это и есть жесткая ссылка.

Жесткая ссылка может существовать только в пределах логического тома, поддерживается файловыми системами NTFS и ReFS начиная со сборки 19536.

Для создания жесткой ссылки можно воспользоваться утилитой mklink:

mklink /H C:\Folder1\LinkFileName C:\Folder\FileName

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

Ссылки можно создавать и при помощи PowerShell, для этого воспользуйтесь командой:

New-Item -ItemType HardLink -Path C:\Folder1\LinkFileName -Target C:\Folder\FileName

Команда другая, но принцип тот же самый: -ItemType - тип создаваемой ссылки, в нашем случае жесткая ссылка, -Path - путь к создаваемому файлу ссылки, -Target - файл на который мы делаем ссылку.

Можно ли сделать жесткую ссылку на директорию? Нет, только на файлы.

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

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

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

Saturday, 19 August 2023

Automatic1111 та ComfyUI поруч.


Привіт усім. 

З появою версії SDXL розмір файлів моделей для Stable Diffusion виріс, і він буде рости. І якщо ви маєте декілька GUI для генерації зображень то ці моделі можуть дублюватися на вашому ПК, що не є добре. В мене, для прикладу, живуть поруч Automatic1111 та ComfyUI portable. 

Звісно можно викручуватися через symbolic-лінки на відповідні теки, але так можно заплутатись і то не є надійно.

Можно інсталювати ComfyUI extension для A1111 і мати закладку ComfyUI всередині А1111, але мене особисто юзабіліті А1111 трохи лякає і вбудовувати в нього ще одне мега GUI це вже занадто.

Є ще один шлях - автор ComfyUI вклав файлік extra_models_pack.yaml в якому можно вказати шлях до моделей А1111:

a1111:

    base_path: C:/SDPortable/

або навіть так якщо у вас диск один:

    base_path: /SDPortable/

Це працює для ComfyUI. Але якщо ви користуєтесь ComfyUI Manager то маємо глюк. Менеджер про extra_models_pack.yaml поки що не в курсі.

Що ще є на сьогодні?

Мені не подобається workflow за замовченням в ComfyUI. Я гадав що це звичайний JSON-файл, як декларує сам ComfyUI, але виходить так що для цього треба правити два інших файли defaultGraph.js та pnginfo.js. Так не цікаво, тому краще все ж правити те що в GUI і зберігати свій workflow по замовченню в JSON-файл або PNG-малюнком.

Щасти! Творчих вам успіхів!

Friday, 18 August 2023

Как завершить процесс в Linux.

Всем привет.

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

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

Первый процесс, который запускается при загрузке системы Linux — это systemd или init, которые являются основными, поэтому их невозможно уничтожить даже случайно. В большинстве случаев в операционной системе этим процессам присваивается значение PID равное 1.

Чтобы увидеть все запущенные процессы и соответствующие им значения PID — выполните следующую команду:

ps -A


Чтобы узнать идентификатор конкретного процесса — используя его имя. Для этого Вы можете применить следующую команду (в качестве примера мы использовали имя mysqld):

pidof mysqld

 

Для этой же цели Вы можете ввести комбинацию команд, приведенную ниже (при этом она выводит гораздо больше информации о процессе):

ps aux | grep mysqld

 

Третий способ вывода идентификатора процесса предполагает использование команды pgrep:

pgrep mysql


Команды kill, pkill и killall.

Команда kill — это встроенный инструмент ОС семейства Linux, который используется для завершения процессов вручную. Она посылает сигнал выбранному процессу, который и завершает его. По умолчанию команда kill посылает сигнал SIGTERM запущенному процессу. Это действие обычно останавливает работающие процессы. Если Вы хотите остановить процесс — просто укажите его идентификатор PID в переменной ProcessID.

Синтаксис команды kill выглядит следующим образом:

kill [-s sigspec | -n signum | -sigspec] pid

 

При этом элементы команды имеют следующее значение:

  • sigspec — посылает сигнал процессу, названному по спецификации задания jobspec;
  • signum — посылает сигнал процессу, названному по идентификатору процесса PID.

Существует семь базовых сигналов, которые Вы можете послать, используя команду kill:

  • SIGHUP(1) — сигнал для сообщения о потере соединения с управляющим терминалом пользователя;
  • SIGINT(2) — сигнал о прерывании процесса с клавиатуры (обычно при нажатии комбинации клавиш Ctrl+C);
  • SIGQUIT(3) — сигнал, аналогичный SIGINT, но при этом вызывается символом QUIT, и при завершении процесса производит дамп ядра;
  • SIGABRT(6) — сигнал, посылаемый процессом самому себе при выполнении аварийной остановки с выполнением дампа памяти в случае невозможности дальнейшего продолжения работы программы;
  • SIGKILL(9) — сигнал используется для немедленного завершения программы (не может быть обработан, проигнорирован или заблокирован);
  • SIGTERM(15) — сигнал для завершения работы программы, который можно блокировать, обрабатывать и игнорировать (используется как сигнал по умолчанию);
  • SIGSTOP(17,19,23) — сигнал для приостановки процесса (процесс не возобновится автоматически, пока Вы не отправите ему сигнал SIGCONT — позволяет приостановить процесс, не завершая его).

Tuesday, 15 August 2023

Hello Barbie.

Всем привет.

Любители Stable Diffusion быстро сообразили что там где возможна генерация картинок там возможна и  генерация видео. Точнее сказать, анимации.

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

Из Stable Diffusion расширений которые предназначены для создания анимации мне знакомы несколько: Deforum, SD-CN-Animation и Loopback wave script. Первый довольно новороченый поэтому про него речь поведу в следующий раз. А вот про два других могу сказать пару слов сегодня.

Скажу сразу что от SD-CN-Animation я отказался. В нем по непонятным для меня причинам все оказалось плохо - он конфликтует с ROOP, он умудряется генерить очень плохие картинки на тех же промптах что и другие скрипты. Поэтому я его исключил из дальнейшего обращения  Stable Diffusion. А вот Loopback wave script меня порадовал своей простотой и адекватностью.

Живет он здесь, там же страничка как им пользоваться. Все что касается ffmpeg относится к финальной стадии сборки всех кадров в один видеофайл. Ffmpeg надо будет поставить отдельно. Хотя я вам покажу ниже как его можно использовать самостоятельно и с лучшим качеством.

Итак главное это количество фреймов, чем их больше тем дольше Stable Diffusion в лице А1111 будет трудиться над их созданием. И ...все), шучу - еще надо вписать промпт где первая цифра значит с какого кадра он действует для Stable Diffusion. "Save results as Video" это значит что после генерации А1111 передаст внешнюю команду для ffmpeg на сборку видео с выбраным кодеком.


Tuesday, 8 August 2023

Легкий доступ к VHDX-файлу.

Всем привет.

Заметки на полях про диск формата VHDx. Вы наверняка знаете что это формат HyperV виртуальных машин, и даже знаете что к файлам на нем можно подступиться без сети с помощью Powershell Direct.

Но оказывается что получить доступ к файлам такой виртуальной машины можно еше проще - достаточно ее просто... выключить.) Как это? Да вот так - выключаете ВМ и там же на гипервизоре, или в другом месте куда вы перенесете сам VHD-файл, делаете двойной клик по файлу. И он  тут же монтируется как виртуальный диск с полным доступом.

Но смущен я тем что в этом случае мне даже не надо иметь аккаунт на той ВМ. Но что есть то есть.

Успехов.


Friday, 4 August 2023

ComfyUI не один такий.


Привіт усім.

Так вже вийшло що з появою моделі SDXL увага до ComfyUI підскочила на порядок. Чому так? Тому що розробник ComfyUI вчасно надав приклад використання нової моделі в одному потоці. Тому навіть фанати А1111 швиденько відчули що ComfyUI може дати результат швидше та наглядніше.



Єдине що Google вже включив обмеження на використання ресурсів онлайн і в Colab ви вже з цим довго не пограєтесь безкоштовно. Та й самі SDXL-моделі Base та Refiner стали більші у розмірах.

Але зараз я хочу вам зауважити що автор ComfyUI не був піонером візуального (в нодах) відтворення процесу генерації зображень.

Wednesday, 2 August 2023

Траблшутинг Stable Diffusion.

Всем привет.

Бывают случаи когда после очередного обновления Stable Diffusion в лице А1111 перестает работать как надо. 

Частенько Extensions для А1111 используют одни и теже библиотеки и плохо делят их между собой. Поэтому для начала попробуйте отключить (удалять не надо) некоторые из своих расширений и перезапустите А1111. У меня так например не сошлись характерами SD-CN-Animation и ROOP.

Если это не помогло тогда можно откатить свой Stable Diffusion до предыдущего релиза. До какого именно, вам надо определиться самим по истории в репозитории А1111 в Git. В принципе вся процедура тривиальна и хорошо знакома знатокам CI/CD.

Для возврата на другую версию Stable Diffusion WebUI, необходимо в папке с Stable Diffusion выполнить команду:

git checkout <номер нужного релиза A1111>

Номер релиза в Git фигурирует как branch number. Как найти нужный есть много мануалов в сети.

Ввести команду можно так:

- если вы в ручную устанавливали Git то у вас в проводнике Windows появились быстрые команды для Git в popup-меню. Правой кнопкой мыши нажмите на папку с вашей Stable Diffusion и выберете в появившемся меню Git Bash Here. После чего откроется окно с командной строкой в которой уже можно вписать или вставить данную команду,

-  можно в проводнике открыть папку с вашей Stable Diffusion. В адресной строке вверху где показывается весь путь к вашей папки с Stable Diffusion, выделить все и на английской раскладке написать cmd  и нажать Enter. Запустится оболочка командной строки куда также можно вставить команду приведенную выше.

Важно - выполнять команду следует именно в папке Stable Diffusion!

После того как команда выполнена, закройте окно командной стоки, удалите папку venv, так как с последним обновлением обновились зависимости и запустите как обычно, с помощью webui-user.bat. Папка venv создастся сама при запуске А1111, нужные зависимости установятся автоматически или подтянутся из кеша, без повторного скачивания.

Никаких правок в webui-user.bat делать не нужно, git pull тоже можно оставить в скрипте. Однако для портабельной версии следует сократить строку git pull origin master до git pull.

Когда разработчики поправят баги вы сможете вернуться на актуальную версию командой:

git checkout master

Успехов.

Tuesday, 1 August 2023

Собираем статистику в один клик, v3.

Всем привет.

По некоторым причинам я решил отойти от сбора статистики по серверам в AIDA64 и ограничиться сбором информации сугубо через Powershell.

Если вы помните ранее я делал подобное с серверами HyperV.  На сегодня эта задача упростилась до сбора следующих параметров:

  •     Hostname    
  •     Serial number
  •     Product number (SKU)
  •     Model host     
  •     OS Type    
  •     OS Locale  
  •     OS Bits (32/64)   
  •     CPU Type   
  •     RAM Size (GB) 
  •     Disk Size (GB)
  •     IP Address of active physical adapters.

Исходя из этого я создал функцию Get-CMDBInfo которая в качестве параметра принимает только путь куда положить файл отчета в формате CSV. Далее процедура простая: либо вы экспортируете отчет в Excel вручную либо делаете это через:

Import-csv -Path 'c:\tmp\_SERVER01.csv' | Export-Excel -Path 'c:\tmp\database.xlsx' -AutoSize -WorksheetName Sheet1 -Append -Show

Во втором случае первая строка в database.xlsx должна соответствовать заранее структуре (шапке) отчета, т.е. быть такой: "a0Date_info","a0Hostname","a0Model","a0Product_number","a0Serial_number","a1CPU_Type","a1Disk_Size","a1RAM_Size","b0IP_Address","b1OS_Type","OS_Bits","OS_Locale","OS_release"

Версия на печать

Популярное