Purple Team Diary's
СтатистикаКанал об информационной безопасности и опасности :) Обратная связь: @mrl_joy
- Последний пост
- 18 июл.
- Последнее чтение
- 14:13
- Постов за неделю
- 0
- Всего постов
- 64
- Тип
- открытый
- Язык
- русский
- В каталоге с
- 12 авг.
- 1/24сутки в ленте
- 320
- 1/48двое суток
- 366
- 1/72трое суток
- 395
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
Попробовал написать свой AI-agent для пентеста. Логика агента и тулы оформлены в виде MCP-серверов. Для связки с MCP и локальной LLM использую opencode. Заодно получилась скрытая реклама сайта😅 #MLSecOps
Проверка целостности квантованных INT4 моделей Квантованная модель для человека и большинства фреймворков выглядит как набор целочисленных тензоров. Из-за этого она превращается в черный ящик. Злоумышленник может подменить оригинальную модель на другую, просто переименовав файлы, или незаметно внедрить бэкдор в отдельные веса. Без специальной верификации эта подмена останется незамеченной: модель успешно загрузится, пройдет базовые тесты и будет генерировать текст. Написал небольшой код proverka.py, который решает эту задачу. Он сравнивает квантованную модель с оригиналом и математически доказывает, что квантованная версия получена именно из него, а не была скачана из другого источника. Как устроена INT4-квантизация Квантизация INT4 сжимает карту весов (float16) в четыре раза: 1. Карта разбивается на блоки по 128 элементов. 2. Для каждого блока вычисляются масштаб и точка сдвига. 3. Все значения внутри блока округляются до одного из 16 возможных уровней (4 бита). 4. Восемь таких 4-битных значений упаковываются в одно 32-битное целое число. Точность неизбежно теряется, появляется шум квантизации. Деквантовка — это обратный процесс восстановления карты по грубым данным. Восстановленная карта похожа на оригинал, но не идентична ему. Разница между ними и есть предсказуемый шум. На этом и строится проверка. Если исходные веса те же, характер шума будет строго предсказуемым. Если веса подменены, математическая картина ошибок изменится. Три этапа верификации Этап 1. Проверка неизменяемых слоев Некоторые части модели, такие как embedding (таблица токенов) и слои нормализации, не квантуются, так как это разрушит логику работы нейросети. Они должны быть побайтово идентичны оригиналу. Скрипт сверяет их напрямую. Допускается минимальная погрешность только в случае, если модель была конвертирована из bf16 в fp16. Этап 2. Анализ квантованных весов Это ядро проверки. Код распаковывает qweight обратно в float32 и сравнивает с оригиналом, оценивая три метрики, которые практически невозможно подделать одновременно: 1. Средняя ошибка. Ожидается естественный шум округления (в пределах 0.01–0.05). Если ошибка превышает 0.1, это прямой индикатор того, что веса взяты от другой модели. 2. Систематический сдвиг. Проверяет симметрию ошибок округления. В норме часть весов округляется вверх, часть вниз. Если все ошибки имеют один знак, значит, веса были искусственно сдвинуты. 3. Соотношение разбросов. Сравнивает дисперсию восстановленных весов с оригиналом. Если злоумышленник попытается заполнить веса нулями или константами, разброс станет равен нулю, что сразу выдаст подмену. Этап 3. Структурный анализ При квантовании тензор .weight заменяется на три новых: .qweight, .scales и .qzeros, а тип данных меняется с плавающей точки на int32. Код проверяет, что набор ключей и их типы строго соответствуют ожидаемой архитектуре. Это отсекает случаи, когда подменяют саму архитектуру или копируют чужие файлы без сохранения внутренней структуры. Для корректного сравнения скрипт деквантует веса в float32. Чтобы не исчерпать память, обработка ведется строго послойно. Установка uv pip install torch safetensors numpy Запуск python proverka.py --original models/Qwen2.5-1.5B-Instruct --quantized models/Qwen2.5-1.5B-Instruct-AWQ --output result.json Демонстрация подмены: python3 -c "from safetensors.torch import load_file, save_file import torch, os, shutil src = 'models/Qwen2.5-1.5B-Instruct-AWQ' dst = 'models/qwen-tampered' if os.path.exists(dst): shutil.rmtree(dst) shutil.copytree(src, dst) t = load_file(os.path.join(src, 'model.safetensors')) for k in list(t.keys()): if k.endswith('.qweight') or k.endswith('.qzeros'): t[k] = torch.full(t[k].shape, 0x88888888, dtype=torch.int64).to(torch.int32) save_file(t, os.path.join(dst, 'model.safetensors')) " Запуск: python proverka.py --original models/Qwen2.5-1.5B-Instruct --quantized models/qwen-tampered Если опять будет 3-4 лайка - канал закрою)) #MLSecOps
без подписи
Проверка целостности квантованных INT4 моделей Квантованная модель для человека и большинства фреймворков выглядит как набор целочисленных тензоров. Из-за этого она превращается в черный ящик. Злоумышленник может подменить оригинальную модель на другую, просто переименовав файлы, или незаметно внедрить бэкдор в отдельные веса. Без специальной верификации эта подмена останется незамеченной: модель успешно загрузится, пройдет базовые тесты и будет генерировать текст. Написал небольшой код proverka.py, который решает эту задачу. Он сравнивает квантованную модель с оригиналом и математически доказывает, что квантованная версия получена именно из него, а не была скачана из другого источника. Как устроена INT4-квантизация Квантизация INT4 сжимает карту весов (float16) в четыре раза: 1. Карта разбивается на блоки по 128 элементов. 2. Для каждого блока вычисляются масштаб и точка сдвига. 3. Все значения внутри блока округляются до одного из 16 возможных уровней (4 бита). 4. Восемь таких 4-битных значений упаковываются в одно 32-битное целое число. Точность неизбежно теряется, появляется шум квантизации. Деквантовка — это обратный процесс восстановления карты по грубым данным. Восстановленная карта похожа на оригинал, но не идентична ему. Разница между ними и есть предсказуемый шум. На этом и строится проверка. Если исходные веса те же, характер шума будет строго предсказуемым. Если веса подменены, математическая картина ошибок изменится. Три этапа верификации Этап 1. Проверка неизменяемых слоев Некоторые части модели, такие как embedding (таблица токенов) и слои нормализации, не квантуются, так как это разрушит логику работы нейросети. Они должны быть побайтово идентичны оригиналу. Скрипт сверяет их напрямую. Допускается минимальная погрешность только в случае, если модель была конвертирована из bf16 в fp16. Этап 2. Анализ квантованных весов Это ядро проверки. Код распаковывает qweight обратно в float32 и сравнивает с оригиналом, оценивая три метрики, которые практически невозможно подделать одновременно: 1. Средняя ошибка. Ожидается естественный шум округления (в пределах 0.01–0.05). Если ошибка превышает 0.1, это прямой индикатор того, что веса взяты от другой модели. 2. Систематический сдвиг. Проверяет симметрию ошибок округления. В норме часть весов округляется вверх, часть вниз. Если все ошибки имеют один знак, значит, веса были искусственно сдвинуты. 3. Соотношение разбросов. Сравнивает дисперсию восстановленных весов с оригиналом. Если злоумышленник попытается заполнить веса нулями или константами, разброс станет равен нулю, что сразу выдаст подмену. Этап 3. Структурный анализ При квантовании тензор .weight заменяется на три новых: .qweight, .scales и .qzeros, а тип данных меняется с плавающей точки на int32. Код проверяет, что набор ключей и их типы строго соответствуют ожидаемой архитектуре. Это отсекает случаи, когда подменяют саму архитектуру или копируют чужие файлы без сохранения внутренней структуры. Для корректного сравнения скрипт деквантует веса в float32. Чтобы не исчерпать память, обработка ведется строго послойно. Установка uv pip install torch safetensors numpy Запуск python proverka.py --original models/Qwen2.5-1.5B-Instruct --quantized models/Qwen2.5-1.5B-Instruct-AWQ --output result.json Демонстрация подмены: python3 -c "from safetensors.torch import load_file, save_file import torch, os, shutil src = 'models/Qwen2.5-1.5B-Instruct-AWQ' dst = 'models/qwen-tampered' if os.path.exists(dst): shutil.rmtree(dst) shutil.copytree(src, dst) t = load_file(os.path.join(src, 'model.safetensors')) for k in list(t.keys()): if k.endswith('.qweight') or k.endswith('.qzeros'): t[k] = torch.full(t[k].shape, 0x88888888, dtype=torch.int64).to(torch.int32) save_file(t, os.path.join(dst, 'model.safetensors')) " Запуск: python proverka.py --original models/Qwen2.5-1.5B-Instruct --quantized models/qwen-tampered Если опять будет 3-4 лайка - канал закрою)) #MLSecOps
Большинство приложений установленных на мобильное устройство следят за вашими действиями (включая звонки и покупки в маркеплейсах). Показываю где найти раздел "Управление будущими действиями" в Instagram, в котором можно отключить данный кейс (вряд-ли полностью, но все же).
Превращение AI-агента в архитектора кода Плагин Superpowers - это фреймворк, который превращает агента из обычного генератора кода в системного инженера. Он добавляет структурированные рабочие процессы, благодаря которым ИИ не просто «лепит» код, а сначала думает, планирует, тестирует и только потом реализует. В плагин встроено 15 профессиональных навыков, каждый из которых закрывает конкретный этап разработки. Вот самые полезные: * brainstorming - Глубинный анализ задачи и сбор требований ДО первой строки кода. * writing-plans - Чёткое пошаговое планирование для многослойных задач. * test-driven-development (TDD) - Тесты пишутся первыми - код становится надёжным с самого начала. * systematic-debugging - Структурный поиск багов вместо гадания «а что если…». * dispatching-parallel-agents - Запуск суб-агентов для параллельного решения независимых подзадач (ускорение в разы). Установка в opencode: Запускаем opencode и вводим промт для установки: Fetch and follow instructions from https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.opencode/INSTALL.md После перезапускаем opencode и вводим: "Ты теперь умеешь использовать superpowers? Перечисли навыки." Если плагин установился, он выдаст нумерованный список из 15 навыков. Пример использования: Вместо обычного промпта "сделай мне парсер для PDF", пишем: Напиши скрипт для парсинга PDF в Markdown. Используй навык writing-plans для подготовки шагов, а затем test-driven-development для реализации. Агент начнет работать по строгому алгоритму: план - тесты - код - проверка. Качество кода при таком подходе возрастает в разы. #ML
Шпаргалка по установке MOSS-TTS По совету из предыдущего поста от @szybnev решил попробовать MOSS-TTS - и результат действительно порадовал🤗 Установка: conda create -n moss-tts python=3.12 -y conda activate moss-tts sudo apt-get install -y ffmpeg git clone https://github.com/OpenMOSS/MOSS-TTS.git cd MOSS-TTS pip install --extra-index-url https://download.pytorch.org/whl/cu128 \ torch==2.9.1+cu128 torchaudio==2.9.1+cu128 torchcodec==0.8.1 transformers==5.0.0 pip install flash-attn --no-build-isolation pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[torch-runtime]" Запуск: python clis/moss_tts_app.py Если при запуске появляется ошибка открываем файл: nano ~/MOSS-TTS/clis/moss_tts_app.py И проверяем блок: duration_tokens = gr.Slider( minimum=0.5, maximum=1.5, value=1.0, step=0.5, ... Если значения отличаются, меняем на эти. #ML
Генерация речи Ниже - два удобных варианта для локального TTS: Qwen3-TTS и F5-TTS. Qwen3-TTS Устанавливаем зависимости: conda create -n qwen3-tts python=3.12 -y conda activate qwen3-tts pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/cu128 pip install https://github.com/Dao-AILab/flash-attention/releases/download/v2.8.3.post1/flash_attn-2.8.3.post1+cu12torch2.8cxx11abiFALSE-cp312-cp312-linux_x86_64.whl sudo apt install -y ninja-build pip install -U qwen-tts Если нужен голос по описанию персонажа: qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --ip 0.0.0.0 --port 8000 Пример промпта: A young female speaker is talking in Russian. Her voice is very expressive, emotional, and energetic. She sounds like a real person, with natural intonations and a clear, engaging tone. The recording is high quality, as if recorded in a studio. Если нужен более реалистичный встроенный голос: qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 0.0.0.0 --port 8000 Если есть образец хорошего голоса: qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base --ip 0.0.0.0 --port 8000 F5-TTS Ещё один популярный вариант для русскоязычной генерации речи. Установка: conda create -n f5-tts python=3.11 -y conda activate f5-tts pip install torch torchvision torchaudio torchcodec --index-url https://download.pytorch.org/whl/cu128 sudo apt update sudo apt install -y git ffmpeg git clone https://github.com/SWivid/F5-TTS.git cd F5-TTS pip install -e . pip install soundfile Скачиваем модель: hf download Misha24-10/F5-TTS_RUSSIAN \ --include "F5TTS_v1_Base_v2/model_last_inference.safetensors" \ --local-dir ~/F5-TTS hf download Misha24-10/F5-TTS_RUSSIAN \ --include "F5TTS_v1_Base/vocab.txt" \ --local-dir ~/F5-TTS Запуск: python -m f5_tts.infer.infer_gradio --host 0.0.0.0 --port 8000 #ML
Бесконечная генерация видео в ComfyUI 1. Установка необходимых нод git clone https://github.com/city96/ComfyUI-GGUF ~/ComfyUI/custom_nodes/ComfyUI-GGUF cd ~/ComfyUI/custom_nodes/ComfyUI-GGUF pip install -r requirements.txt 2. Установка LoRA моделей SVI # LightX2V I2V 14B 480p hf download Kijai/WanVideo_comfy Lightx2v/lightx2v_I2V_14B_480p_cfg_step_distill_rank32_bf16.safetensors --local-dir ~/ComfyUI/models/loras && \ mv ~/ComfyUI/models/loras/Lightx2v/*.safetensors ~/ComfyUI/models/loras/ # SVI_v2_PRO Wan2.2 HIGH hf download Kijai/WanVideo_comfy LoRAs/Stable-Video-Infinity/v2.0/SVI_v2_PRO_Wan2.2-I2V-A14B_HIGH_lora_rank_128_fp16.safetensors --local-dir ~/ComfyUI/models/loras && \ mv ~/ComfyUI/models/loras/LoRAs/Stable-Video-Infinity/v2.0/*.safetensors ~/ComfyUI/models/loras/ # SVI_v2_PRO Wan2.2 LOW hf download Kijai/WanVideo_comfy LoRAs/Stable-Video-Infinity/v2.0/SVI_v2_PRO_Wan2.2-I2V-A14B_LOW_lora_rank_128_fp16.safetensors --local-dir ~/ComfyUI/models/loras 3. Установка GGUF моделей # high noise (Q3_K_M) hf download bullerwins/Wan2.2-I2V-A14B-GGUF wan2.2_i2v_high_noise_14B_Q3_K_M.gguf --local-dir ~/ComfyUI/models/unet # low noise (Q3_K_M) hf download bullerwins/Wan2.2-I2V-A14B-GGUF wan2.2_i2v_low_noise_14B_Q3_K_M.gguf --local-dir ~/ComfyUI/models/unet Запускаем python main.py --listen 0.0.0.0 #ML
Быстрый socks5 прокси В одну команду: docker run -d --name socks5 -p 1080:1080 -e PROXY_USER=d412uiwry2123 -e PROXY_PASSWORD=do123iashdasd --restart=always serjs/go-socks5-proxy Строка для подключения: socks5://user:pass@host:port #Network
SGLang против vLLM При развертывании LLM в продакшене обычно стоит выбор между vLLM и TensorRT-LLM. Первый дает удобное API и быстро внедряется, но уступает в скорости на сложных пайплайнах. Второй выжимает максимум из железа, но требует компиляции графов и отладки C++ бэкенда. SGLang закрывает этот разрыв. Это движок инференса, который архитектурно заточен под агентные фреймворки, сложный RAG и многошаговые рассуждения. Ключевое отличие от vLLM кроется в управлении KV-кэшем. Он хранит KV-кэш в виде радиксного дерева. При обработке запросов с общими префиксами (системные промпты, контекст RAG или история диалога) кэш не пересчитывается, а переиспользуется. Это дает кратный прирост скорости в задачах, где запросы имеют пересекающийся контекст. В бенчмарках на агентных сценариях SGLang стабильно обходит vLLM. По чистой скорости инференса он приближается к TensorRT-LLM. Но в отличие от TRT, SGLang остается Python-фреймворком. Не нужно тратить время на компиляцию моделей под конкретное железо и решение проблем с CUDA-контекстами. Установка и запуск занимают несколько минут. Базовый вариант через pip: pip install "sglang[all]" Запуск сервера с моделью Llama 3: python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3-8B-Instruct --port 30000 SGLang предоставляет OpenAI-совместимый API: curl http://localhost:30000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "meta-llama/Meta-Llama-3-8B-Instruct", "messages": [{"role": "user", "content": "Объясни RadixAttention"}] }' Для продакшена удобнее использовать Docker: docker run --gpus all --ipc=host --net=host --rm -it \ -v ~/.cache/huggingface:/root/.cache/huggingface \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path meta-llama/Meta-Llama-3-8B-Instruct \ --host 0.0.0.0 --port 30000 #MLOps
Меняем геолокацию Включаем режим разработчика, устанавливаем https://play.google.com/store/apps/details?id=com.hopefactory2021.fakegpslocation В режиме разработчика выбираем "Выбрать приложение для фиктивных местоположений" - выбираем установленное и меняем локацию
без подписи
Анимация изображений через Wan 2.2 I2V в ComfyUI В эпоху, когда технологии всё чаще используют для генерации контента интимного характера, я решил направить их в совершенно иную сторону. На входе - изображение Николая Чудотворца, на выходе - плавная, живая анимация с сохранением личности, мягкого свечения и деталей лица. Пробую продвинутый вариант с WanVideoWrapper, LightX2V 4-step моделями и LoRA. Ниже команды для установки моделей. 1. Переходим в ComfyUI cd ~/ComfyUI mkdir -p models/diffusion_models mkdir -p models/text_encoders mkdir -p models/vae mkdir -p models/loras/wan22/lightx2v mkdir -p models/loras/wan22/loras 2. Качаем Text Encoder hf download Kijai/WanVideo_comfy \ umt5-xxl-enc-bf16.safetensors \ --local-dir models/text_encoders 3. Качаем VAE hf download Kijai/WanVideo_comfy \ Wan2_1_VAE_fp32.safetensors \ --local-dir models/vae 4. Качаем Clean HIGH model hf download Kijai/WanVideo_comfy \ Wan2_2-I2V-A14B-HIGH_bf16.safetensors \ --local-dir models/diffusion_models 5. Качаем LightX2V 4-step модели hf download lightx2v/Wan2.2-Distill-Models \ wan2.2_i2v_A14b_high_noise_lightx2v_4step_1030.safetensors \ --local-dir models/diffusion_models hf download lightx2v/Wan2.2-Distill-Models \ wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors \ --local-dir models/diffusion_models 6. Качаем LightX2V LoRA hf download lightx2v/Wan2.2-Distill-Loras \ wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step_1022.safetensors \ --local-dir models/loras/wan22/lightx2v hf download lightx2v/Wan2.2-Distill-Loras \ wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step_1022.safetensors \ --local-dir models/loras/wan22/lightx2v 7. Качаем Realistic LoRA hf download r4tn4/W25_Realistic_I2V \ W25_Realistic_I2V_HIGH_v2.safetensors \ --local-dir models/loras/wan22/loras hf download r4tn4/W25_Realistic_I2V \ W25_Realistic_I2V_LOW_v2.safetensors \ --local-dir models/loras/wan22/loras 8. Ставим SageAttention Если в workflow выбран attention mode sageattn_3 или sageattn_blackwell, нужно поставить пакет: python -m pip install sageattention Проверка: python - <<'PY' import sageattention print("sageattention OK:", sageattention) PY 9. Проверяем, что всё скачалось find ~/ComfyUI/models -type f | grep -Ei "umt5-xxl-enc|Wan2_1_VAE|Wan2_2-I2V|A14b|W25_Realistic" Ожидаемые файлы: models/text_encoders/umt5-xxl-enc-bf16.safetensors models/vae/Wan2_1_VAE_fp32.safetensors models/diffusion_models/Wan2_2-I2V-A14B-HIGH_bf16.safetensors models/diffusion_models/wan2.2_i2v_A14b_high_noise_lightx2v_4step_1030.safetensors models/diffusion_models/wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors models/loras/wan22/lightx2v/wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step_1022.safetensors models/loras/wan22/lightx2v/wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step_1022.safetensors models/loras/wan22/loras/W25_Realistic_I2V_HIGH_v2.safetensors models/loras/wan22/loras/W25_Realistic_I2V_LOW_v2.safetensors Запускаем ComfyUI python main.py --listen 0.0.0.0 --enable-manager Дальше загружаем workflow для Wan 2.2 I2V через WanVideoWrapper, выбираем исходную картинку в Load Image и запускаем генерацию. Если появляется ошибка: Selected attention mode not available значит выбранный attention mode недоступен. Можно переключить Models attention mode на sdpa. #ML
без подписи
без подписи
Редактируем свадебные фото с помощью ИИ Свадебные фотографии получились слишком тёмными, с выраженным жёлто-коричневым оттенком на лицах. Вытянуть такие кадры обычной цветокоррекцией в Photoshop оказалось сложно, поэтому решил попробовать Flux.2 Klein 9B в ComfyUI. Результат приятно удивил)) можно аккуратно править экспозицию, цвет, контраст, фон и отдельные объекты, при этом сохраняя людей, лица, одежду и композицию фотографии. Ниже краткая инструкция по установке моделей. Переходим в ComfyUI cd ~/ComfyUI Качаем Flux.2 Klein 9B hf download black-forest-labs/FLUX.2-klein-9b-fp8 \ flux-2-klein-9b-fp8.safetensors \ --local-dir models/diffusion_models Качаем Qwen text encoder hf download Comfy-Org/flux2-klein-9B \ split_files/text_encoders/qwen_3_8b_fp8mixed.safetensors \ --local-dir models Перекладываем text encoder в нужную папку mkdir -p models/text_encoders mv models/split_files/text_encoders/qwen_3_8b_fp8mixed.safetensors models/text_encoders/ Качаем VAE small decoder hf download black-forest-labs/FLUX.2-small-decoder \ full_encoder_small_decoder.safetensors \ --local-dir models/vae Проверяем, что всё на месте find ~/ComfyUI/models -type f | grep -Ei "klein|qwen|small_decoder" Ожидаемый результат: models/diffusion_models/flux-2-klein-9b-fp8.safetensors models/text_encoders/qwen_3_8b_fp8mixed.safetensors models/vae/full_encoder_small_decoder.safetensors Дальше загружаем workflow, прикреплённый к сообщению, выбираем исходное фото в Load Image, прописываем нужные изменения в prompt и запускаем генерацию. Пример prompt прикрепил тоже. P.S Свадьба не моя!!!😂 #ML
Если после обновы в burp не открывается sandbox браузер то вот решение: find ~ -type f -name "chrome-sandbox" sudo chown root:root /home/user/BurpSuitePro/burpbrowser/146.0.7680.177/chrome-sandbox && sudo chmod 4755 /home/user/BurpSuitePro/burpbrowser/146.0.7680.177/chrome-sandbox #Pentest
Разворачиваем Flux 2 у себя на ПК Качаем проект для управления воркфлоу: git clone https://github.com/comfyanonymous/ComfyUI.git Качаем модели (я выбираю кватованную): hf download Comfy-Org/flux2-dev \ --include "*/flux2*fp8*.safetensors" \ --include "*/vae/*.safetensors" \ --include "*/text_encoders/*fp8*.safetensors" \ --include "split_files/vae/flux2-vae.safetensors" \ --local-dir ./ComfyUI/models Перемещаем чтобы ComfyUI увидел: cd ~/ComfyUI mkdir -p models/diffusion_models mkdir -p models/text_encoders mkdir -p models/vae mv models/split_files/diffusion_models/flux2_dev_fp8mixed.safetensors \ models/diffusion_models/ mv models/split_files/text_encoders/mistral_3_small_flux2_fp8.safetensors \ models/text_encoders/ mv models/split_files/vae/flux2-vae.safetensors \ models/vae/ Проверяем: find ~/ComfyUI/models -type f | grep -Ei "flux2|vae|t5|clip" Запускаем: python main.py --listen 0.0.0.0 http://<IP_сервера>:8188 #MLOps
Заворачиваем трафик Телеграма, Instagram, YouTube через тоннель на MikroTik Надоело постоянно переключаться между VPN и прокси с разных устройств. На MikroTik поднял интерфейс подключенный к VPN и в этот интерфейс заворачиваю трафик ютуба (писал раннее), а теперь еще и телеграма. Добавляем NAT для WireGuard /ip firewall nat add action=masquerade chain=srcnat out-interface=wg0 Добавляем прямые маршруты для Telegram через WireGuard: /ip route add dst-address=149.154.160.0/20 gateway=wg0 comment="Telegram_route" /ip route add dst-address=91.108.4.0/22 gateway=wg0 comment="Telegram_route" /ip route add dst-address=95.161.64.0/20 gateway=wg0 comment="Telegram_route" Бонусом инстаграм: /ip route add dst-address=157.240.0.0/16 gateway=wg0 comment="Instagram_route" /ip route add dst-address=31.13.64.0/18 gateway=wg0 comment="Instagram_route" /ip route add dst-address=31.13.24.0/21 gateway=wg0 comment="Instagram_route" /ip route add dst-address=69.171.224.0/19 gateway=wg0 comment="Instagram_route" /ip route add dst-address=179.60.192.0/22 gateway=wg0 comment="Instagram_route" /ip route add dst-address=185.60.216.0/22 gateway=wg0 comment="Instagram_route" /ip route add dst-address=185.89.216.0/22 gateway=wg0 comment="Instagram_route" /ip route add dst-address=157.240.204.0/22 gateway=wg0 comment="Instagram_route" Ютуб: /ip route add dst-address=142.250.0.0/15 gateway=wg0 comment="YouTube_route" /ip route add dst-address=172.217.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=216.58.192.0/19 gateway=wg0 comment="YouTube_route" /ip route add dst-address=74.125.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=35.190.0.0/17 gateway=wg0 comment="YouTube_route" /ip route add dst-address=35.191.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=64.233.160.0/19 gateway=wg0 comment="YouTube_route" /ip route add dst-address=66.102.0.0/20 gateway=wg0 comment="YouTube_route" /ip route add dst-address=108.177.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=173.194.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=142.251.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=18.239.0.0/16 gateway=wg0 comment="YouTube_route" /ip route add dst-address=34.160.0.0/16 gateway=wg0 comment="YouTube_route" DNS: /ip route add dst-address=8.8.8.0/24 gateway=wg0 comment="DNS_via_WireGuard" /ip route add dst-address=8.8.4.0/24 gateway=wg0 comment="DNS_via_WireGuard" /ip route add dst-address=1.1.1.0/24 gateway=wg0 comment="DNS_via_WireGuard" Дополнительно: /ip route add dst-address=162.159.0.0/16 gateway=wg0 comment="CDN" /ip route add dst-address=104.16.0.0/12 gateway=wg0 comment="CDN" /ip route add dst-address=185.73.192.0/22 gateway=wg0 comment="CDN" /ip route add dst-address=178.130.0.0/16 gateway=wg0 comment="CDN" /ip route add dst-address=87.240.0.0/16 gateway=wg0 comment="CDN" /ip route add dst-address=87.245.0.0/16 gateway=wg0 comment="CDN" /ip route add dst-address=151.101.0.0/16 gateway=wg0 comment="CDN" /ip route add dst-address=192.178.0.0/16 gateway=wg0 comment="CDN" /ip route add dst-address=216.239.32.0/20 gateway=wg0 comment="CDN" /ip route add dst-address=209.85.128.0/17 gateway=wg0 comment="CDN" /ip route add dst-address=23.11.40.0/22 gateway=wg0 comment="CDN" /ip route add dst-address=199.232.0.0/16 gateway=wg0 comment="CDN" Посмотреть и добавить проблемные адреса: /ip firewall connection print where tcp-state="time-wait" or tcp-state="close-wait" #Network