Files
wow-design-wiki/research/self-hosted-logo-generation.md

813 lines
30 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Self-Hosted: Профессиональная генерация логотипов с помощью LLM/AI
**Дата:** 19 июня 2026
**Контекст:** Россия, без внешних сервисов, без оплаты, полностью self-hosted
**Железо:** RTX A2000 12GB + RTX 3080 Ti 12GB = 24GB VRAM суммарно
---
## ОБЗОР АРХИТЕКТУРЫ
```
┌──────────────────────────────────────────────────────────────┐
│ SELF-HOSTED LOGO PIPELINE │
├──────────────────────────────────────────────────────────────┤
│ │
│ LLM (локально) → Промпт-инжиниринг │
│ Ollama + Open WebUI → Анализ brief, генерация │
│ промптов, референсный поиск │
│ │
│ ↓ │
│ │
│ Image Gen (локально) → Генерация концептов │
│ ComfyUI + FLUX.1-dev → Основной генератор │
│ + LoRA Logo-Design → Специализация на логотипах │
│ │
│ ↓ │
│ │
│ Vectorization (локально) → Растер → SVG │
│ VTracer (Rust) → Цветной трассинг │
│ или potracer (Python) → Ч/Б трассинг (Potrace) │
│ │
│ ↓ │
│ │
│ Post-process (локально) → Финализация │
│ Inkscape CLI / Python → Очистка SVG, типографика │
│ SVG-edit, ручная доводка │
│ │
└──────────────────────────────────────────────────────────────┘
```
---
## ЧАСТЬ 1: LLM ДЛЯ ПРОМПТ-ИНЖИНИРИНГА (полностью локально)
### 1.1 Стек
```
Ollama (runner) + Open WebUI (интерфейс) + локальная модель
```
**Модели для промпт-инжиниринга:**
| Модель | Размер | VRAM | Качество для задачи |
|--------|--------|------|-------------------|
| Qwen2.5-32B-Instruct | ~20GB (Q4) | ~20GB | Отличная, лучшая |
| Llama-3.3-70B | ~40GB (Q4) | ~40GB | Слишком большая |
| Qwen2.5-7B-Instruct | ~5GB | ~6GB | Хорошая, быстрая |
| Gemma-2-27B | ~16GB (Q4) | ~18GB | Хорошая |
**Рекомендация:** Qwen2.5-7B или 32B (Q4_K_M) для промпт-инжиниринга. Не нужна огромная модель — задача: структурировать brief и генерировать технические промпты.
### 1.2 Система промпт для генерации промптов логотипов
**System prompt для Ollama/Open WebUI:**
```
Ты — эксперт по логотип-дизайну и AI-генерации изображений.
Пользователь предоставит brief компании. Твоя задача:
1. Проанализировать brief и выделить:
- Название компании
- Отрасль и сегмент (B2B/B2C)
- Ключевые ценности (2-4)
- Целевая аудитория
- Цветовые предпочтения или анти-цвета
- Стиль (минимализм, геометрический, эмблема, etc.)
- Конкуренты/референсы (если указаны)
2. Сгенерировать 5 детальных промптов на английском для
генерации логотипов через Stable Diffusion / FLUX.1:
Формат промпта:
"A [style] logo for [company], featuring [visual element],
[color description], clean lines, flat design, professional,
vector style, isolated on white background"
Дополнительно к каждому промпту:
- Negative prompt: "text, watermark, signature, blurry,
complex background, 3D, realistic, photograph"
- Параметры: steps=24, cfg=3.5-5.0, sampler=DPM++ 2M Karras
- Seed для воспроизводимости
3. Сгенерировать 3 варианта названия для слогана (если brief не содержит)
Все ответы на русском, промпты на английском.
```
### 1.3 Пример вывода
**Ввод:**
```
Компания: "ВекторПей"
Отрасль: платёжный шлюз для e-commerce
ЦА: владельцы интернет-магазинов
Ценности: скорость, надёжность, безопасность
Цвета: тёмно-синий, бирюзовый
Стиль: минималистичный геометрический
```
**Вывод LLM:**
```
Prompt 1 (пикторил-марк):
"A minimalist geometric logo for VektorPay, featuring an abstract
payment arrow merging into a shield shape, dark blue and teal
gradient, clean sharp lines, flat design, professional fintech
branding, isolated on white background"
Negative: "text, watermark, signature, blurry, complex background,
3D, realistic, photograph, ornate, decorative"
Parameters: steps=24, cfg=4.0, sampler=DPM++ 2M Karras
```
---
## ЧАСТЬ 2: ГЕНЕРАЦИЯ ИЗОБРАЖЕНИЙ (локально)
### 2.1 Основной движок: FLUX.1-dev + ComfyUI
**Почему FLUX, а не SDXL:**
- Лучше рендерит текст (критично для wordmark)
- Точнее следует промпту
- Более чистые линии и геометрия (идеально для логотипов)
- Сообщество активно создаёт Logo-специализированные LoRA
- Open-weight, можно запускать локально
**VRAM требования:**
| Режим | VRAM | Модель |
|-------|------|--------|
| FP8 | ~8GB | FLUX.1-dev fp8 |
| TF32/bf16 | ~16GB | FLUX.1-dev полный |
| + LoRA | +2-4GB | Зависит от LoRA |
**На твоём железе (3080 Ti 12GB):**
- FP8-квантованный FLUX.1-dev: работает ✅
- С LoRA: работает с `--medvram` или `--max_split_size` ✅
- SDXL: работает легко ✅ (fallback)
### 2.2 Установка ComfyUI
```bash
# Клонирование
cd ~/projects
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Установка дополнительных node-пакетов
./install.sh
pip install ComfyUI-Manager # менеджер кастомных нод
```
### 2.3 Установка FLUX.1-dev
```bash
# Скачивание модели через huggingface-cli (нужен access token от HF)
pip install huggingface-hub
huggingface-cli download black-forest-labs/FLUX.1-dev \
--local-dir ~/models/FLUX.1-dev \
--local-dir-use-symlinks False
```
Положить в: `ComfyUI/models/unet/` или `ComfyUI/models/diffusion_models/`
### 2.4 Установка LoRA для логотипов
**Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design:**
```bash
# Скачать LoRA-файл
huggingface-cli download Shakker-Labs/FLUX.1-dev-LoRA-Logo-Design \
FLUX-dev-lora-Logo-Design.safetensors \
--local-dir ~/models/loras/
# Положить в: ComfyUI/models/loras/
```
**Использование в промпте/ноде:**
```python
pipe.load_lora_weights(
"Shakker-Labs/FLUX.1-dev-Logo-Design",
weight_name="FLUX-dev-lora-Logo-Design.safetensors"
)
pipe.fuse_lora(lora_scale=0.8) # 0.3-0.8: от слабого к сильному
```
### 2.5 Кастомные ноды для ComfyUI
```bash
# Через ComfyUI Manager (встроен)
# Или вручную:
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
git clone https://github.com/Gourieff/ComfyUI-Rebatch.git
git clone https://github.com/cubiq/ComfyUI_IPPlus_plus.git # для text/overlay
# Для SVG-вывода:
git clone https://github.com/ImagineerNL/ComfyUI-ToSVG-Potracer.git
```
**Ключевые ноды для воркфлоу:**
1. **FluxGILongStack** — эффективная генерация FLUX
2. **Impact Pack** — контроль над генерацией, seed, batch
3. **ComfyUI-ToSVG-Potracer** — автоматическая трассировка в SVG
4. **IPPlus_plus** — наложение текста на генерации (для тестирования wordmark)
### 2.6 Воркфлоу ComfyUI для логотипов
```
Text Prompt → CLIP Text Encode (positive)
│
▼
Seed ──► KSampler ──► [FLUX.1-dev + LoRA Logo] ──► Image
│ │
│ CLIP Vision
│ │
▼ ▼
VAE Decode VTracer / Potrace node
│ │
└────────► Image → [SVG Encode]
│
▼
Save SVG
```
**Параметры генерации:**
| Параметр | Значение | Почему |
|----------|----------|--------|
| Steps | 20-30 | Логотипу не нужно много steps |
| CFG Scale | 3.0-5.0 | Ниже чем для фотореализма |
| Sampler | DPM++ 2M Karras | Быстро и чисто для линий |
| Resolution | 512x512 или 768x768 | Квадрат = стандарт логотипа |
| LoRA Scale | 0.6-0.8 | Не перебарщивать |
| Batch Size | 4-8 | Генерить пачками |
**Промпт-формула для FLUX:**
```
positive: "minimalist logo, [descriptive icon], [style keywords],
[colors], flat design, clean lines, geometric,
vector style, isolated on white background,
professional branding, no text"
negative: "text, watermark, signature, letters, words, blurry,
gradient, 3D, realistic, photograph, complex,
ornate, shadow, background, frame, border"
```
### 2.7 Fallback: SDXL + VectorStudio
Если FLUX не влезает или не работает:
```bash
# SDXL base
huggingface-cli download stablediffusion-xl-base-1.0 \
--local-dir ~/models/SDXL/
# VectorStudio extension для WebUI
git clone https://github.com/GeorgLegato/stable-diffusion-webui-vectorstudio.git
```
VectorStudio добавляет вкладку SVG-редактора прямо в WebUI. Можно рисовать векторы руками и передавать в Stable Diffusion для инпейнтинга.
---
## ЧАСТЬ 3: ВЕКТОРИЗАЦИЯ (локально)
### 3.1 VTracer (рекомендуется)
**VTracer** — современный raster-to-SVG конвертер на Rust:
- O(n) сложность (vs O(n²) у Potrace)
- Цветной трассинг (Potrace только ч/б)
- Python-библиотека: `pip install vtracer`
- CLI: `vtracer -i input.png -o output.svg`
**Установка:**
```bash
# Из исходников (Rust)
git clone https://github.com/visioncortex/vtracer.git
cd vtracer
cargo build --release
# Или через Python
pip install vtracer
# Или через Docker
docker pull visioncortex/vtracer
docker run -v $(pwd):/data visioncortex/vtracer \
-i /data/input.png -o /data/output.svg
```
**CLI примеры:**
```bash
# Авто-режим (определение цвета и пресета)
vtracer -i logo.png -o logo.svg
# Пресет "bw" — для ч/б логотипов
vtracer -i logo.png -o logo.svg -m spline -p bw
# Пресет "poster" — для графических элементов
vtracer -i logo.png -o logo.svg -m polygon -p poster
# Пресет "photo" — для фото с градиентами
vtracer -i logo.png -o logo.svg -m spline -p photo
# Ручной контроль
vtracer -i logo.png -o logo.svg \
-m spline \
--path_precision 4 \
-s 15 \
-l 0.5
```
### 3.2 Potrace (fallback)
```bash
# Установка
sudo apt install potrace
pip install potracer # Python binding
# CLI
potrace input.png -s -o output.svg
# Python
from potracer import potrace
svg = potrace("input.png", algorithm="optical")
```
### 3.3 Сравнение
| Критерий | VTracer | Potrace | AutoTrace |
|----------|---------|---------|-----------|
| Цветной трассинг | ✅ | ❌ (только ч/б) | ❌ |
| Скорость | O(n), быстрый | O(n²), медленнее | O(n²) |
| Качество линий | Отличное | Лучше для сканов | Среднее |
| Python API | ✅ | ✅ | ❌ |
| Rust-native | ✅ | ❌ | ❌ |
| Установка | Cargo / pip | apt / pip | apt |
**Вывод:** VTracer — лучший выбор для AI-генерированных логотипов (цветные, растровые изображения от FLUX/SDXL).
---
## ЧАСТЬ 4: ПОСТПРОЦЕССИНГ И ФИНАЛИЗАЦИЯ
### 4.1 SVG-редактирование (CLI)
```bash
# Inkscape (бесплатный векторный редактор)
sudo apt install inkscape
# Очистка SVG (удаление дубликатов, упрощение путей)
inkscape --actions="select-all;object-unpath;paths-combine;object-unpath" \
input.svg -o cleaned.svg
# Упрощение путей (reduce nodes)
inkscape input.svg --verb=EditSelectAll --verb=EditGroup \
--verb=PathSimplify --verb=FileSave --verb=FileClose
# Конвертация в EPS/PDF
inkscape input.svg -o output.pdf
inkscape input.svg -o output.eps
# Извлечение отдельных путей
inkscape input.svg --verb=SelectAll --verb=EditUnGroupAll
```
### 4.2 Python-обработка SVG
```python
#!/usr/bin/env python3
"""Логотип-постпроцессор: очистка SVG, нормализация"""
import os
import re
import sys
try:
import svgelements as svg # pip install svgelements
except ImportError:
print("pip install svgelements")
sys.exit(1)
def clean_svg(input_path, output_path, max_nodes=500):
"""Удаление лишнего, упрощение"""
# Чтение
svg_doc = svg.read(input_path)
# Группировка
svg_doc.group()
# Упрощение (если svg-elements поддерживает)
svg_doc.write(output_path)
print(f"Cleaned: {output_path}")
def extract_colors(svg_path):
"""Извлечь цветовую палитру из SVG"""
with open(svg_path) as f:
content = f.read()
colors = re.findall(r'#[A-Fa-f0-9]{6}', content)
# Уникальные
palette = list(dict.fromkeys(colors)) # сохранить порядок
print(f"Palette: {palette[:5]}")
return palette[:5]
def normalize_size(svg_path, output_path, target=512):
"""Нормализовать размер SVG"""
svg_doc = svg.read(svg_path)
svg_doc.size = (target, target)
svg_doc.write(output_path)
```
### 4.3 Ручная доводка: когда AI не справился
AI-логотипы почти всегда требуют ручной доводки. На твоём железе:
1. **Inkscape** — бесплатный векторный редактор с GUI
2. **SVG-Edit** — веб-редактор (встроен в VectorStudio extension)
3. **Rozys** — лёгкий векторный редактор для Linux
**Типичные ручные операции:**
- Выравнивание и симметрия
- Корректировка узлов (node editing)
- Замена AI-текста на настоящий шрифт
- Создание вариаций (inverted, single-color, favicon)
- Определение clear space и минимальных размеров
---
## ЧАСТЬ 5: ПОЛНЫЙ РАБОЧИЙ ПРОЦЕСС
### 5.1 Пошаговый алгоритм
```
ШАГ 1: Brief → Промпты (Ollama + Open WebUI)
$ ollama run qwen2.5:7b
# Загрузить систему промпт (см. секцию 1.2)
# Получить 5-10 промптов
ШАГ 2: Генерация концептов (ComfyUI + FLUX.1-dev)
$ cd ~/projects/ComfyUI
$ source venv/bin/activate
$ python main.py --port 8188 --lowvram # или --medvram
# Открыть http://localhost:8188
# Загрузить workflow (см. секцию 2.6)
# Загрузить LoRA Logo-Design
# Сгенерировать 50-100 концептов (batch x 4-8)
# Выбрать лучшие 5-10
ШАГ 3: Векторизация (VTracer)
$ for img in best_logo_*.png; do
vtracer -i "$img" -o "${img%.png}.svg" -m spline -p bw
done
ШАГ 4: Постпроцессинг (Inkscape CLI + Python)
$ python3 svg_postprocess.py best_logo_1.svg --clean --normalize
ШАГ 5: Ручная доводка (Inkscape GUI)
$ inkscape best_logo_1_cleaned.svg
# - Выравнивание, узлы
# - Замена текста на шрифт (Google Fonts: local install)
# - Создание вариаций
# - Экспорт: SVG, PDF, EPS, PNG (16px → 2048px)
ШАГ 6: Тестирование
# Проверить на разных размерах: 16px, 32px, 64px, 256px, 512px
# Инверсия: белое на чёрном, чёрное на белом
# Один цвет: чёрный на белом (для гравировки)
```
### 5.2 Готовый bash-скрипт-оркестратор
```bash
#!/bin/bash
# generate-logos.sh — Полный self-hosted воркфлоу
set -euo pipefail
BRIEF="$1"
OUTDIR="${2:-./logo-output}"
MODEL="${3:-qwen2.5:7b}"
mkdir -p "$OUTDIR"/{prompts,generations,vectors,final}
echo "=== Step 1: Generate prompts via Ollama ==="
python3 << PYEOF
import subprocess, json
brief = "$BRIEF"
result = subprocess.run([
"ollama", "run", "$MODEL",
], input=f"""System prompt:
Ты — эксперт по логотип-дизайну. Проанализируй brief и сгенерируй
5 детальных промптов на английском для генерации логотипов.
Формат каждого промпта:
Prompt N: [промпт]
Negative: [негативный промпт]
Steps: N | CFG: N.N | Sampler: DPM++ 2M Karras
Brief: {brief}
Верни результат в формате JSON:
[{{"prompt": "...", "negative": "...", "steps": 24, "cfg": 4.0}}, ...]
""", capture_output=True, text=True)
parsed = json.loads(result.stdout)
with open("$OUTDIR/prompts/prompts.json", "w") as f:
json.dump(parsed, f, indent=2)
for p in parsed:
print(f"✓ {p['prompt'][:80]}...")
PYEOF
echo "=== Step 2: Launch ComfyUI ==="
cd ~/projects/ComfyUI
source venv/bin/activate
python main.py --port 8188 --lowvram &
COMFY_PID=$!
sleep 3
echo "ComfyUI запущен на http://localhost:8188"
echo "Открой веб-интерфейс и загрузи workflow"
echo "Нажми Enter после завершения генерации..."
read
kill $COMFY_PID 2>/dev/null || true
echo "=== Step 3: Vectorize best generations ==="
for img in "$OUTDIR/generations"/best_*.png; do
[ -f "$img" ] || continue
base=$(basename "$img" .png)
vtracer -i "$img" -o "$OUTDIR/vectors/${base}.svg" -m spline -p bw
echo "✓ Vectorized: $base"
done
echo "=== Step 4: Post-process SVGs ==="
for svg in "$OUTDIR/vectors"/*.svg; do
base=$(basename "$svg")
python3 svg_postprocess.py "$svg" -o "$OUTDIR/final/${base}"
done
echo "=== Done! ==="
echo "Results in: $OUTDIR/final/"
echo "Open with: inkscape $OUTDIR/final/filename.svg"
```
---
## ЧАСТЬ 6: ДОПОЛНИТЕЛЬНЫЕ ИНСТРУМЕНТЫ
### 6.1 Локальная база референсов
```bash
# Загрузка референсных логотипов (для промпт-инжиниринга)
# Скачивание логотипов конкурентов и анализ стиля
# Создание каталога стилей
mkdir -p ~/models/logo-styles/
# Каждый подкаталог: минимализм, эмблема, wordmark, пикторил, герб
```
### 6.2 Локальные шрифты
```bash
# Google Fonts — бесплатные, можно скачать локально
# Рекомендуемые для финтех/SaaS:
# - Inter (googlefonts.github.io/inter)
# - SF Pro Alternative: Inter, Plus Jakarta Sans
# - Геометрический: Montserrat, Poppins
# - Моноширинный: JetBrains Mono (для dev-инструментов)
mkdir -p ~/.local/share/fonts/google
unzip -j Inter-*.zip "fonts/ttf/Inter-Regular.ttf" "fonts/ttf/Inter-Bold.ttf"
fc-cache -fv
```
### 6.3 Batch-генерация стилей
```bash
# Генерация логотипов в разных стилях параллельно
for style in minimalist geometric emblem wordmark modern; do
(
python3 generate_style.py \
--style "$style" \
--company "VektorPay" \
--output "styling/$style/" \
--model flux1-dev \
--lora logo-design \
--count 20
) &
done
wait
```
---
## ЧАСТЬ 7: ТРЮКИ И СЕКРЕТЫ
### 7.1 Как получить чистый минималистичный логотип
```
# Ключевые слова в positive prompt:
"flat design, solid color, no shading, no gradient, no 3D,
no shadow, no highlight, clean geometry, simple shapes,
minimal detail, bold lines, high contrast, white background"
# Ключевые слова в negative prompt:
"gradient, shadow, 3D, realistic, photograph, text, watermark,
blurry, complex, ornate, decorative, frame, border, background,
noise, grain, texture"
```
### 7.2 Улучшение качества векторизации
```bash
# Предварительная обработка: увеличить контраст
convert input.png -contrast-stretch 5% -negate -threshold 10% preprocessed.png
# Векторизация с оптимальными параметрами
vtracer -i preprocessed.png -o output.svg \
-m spline \
-p bw \
--path_precision 4 \
-s 20 \
-l 0.3
# Упрощение (если много узлов)
vtracer -i input.png -o output.svg \
-m pixel \
-p bw \
-l 1.0 # грубый, меньше узлов
```
### 7.3 Обход проблемы текста в FLUX
```
# FLUX.1-dev генерирует текст, но он нечитаем. Решение:
1. Генерировать БЕЗ текста (--no text в промпте)
2. Создать чистый графический знак (pictorial mark)
3. Wordmark добавить вручную в Inkscape:
- Импортировать SVG-икону
- Добавить текст шрифтом (Inter, JetBrains Mono)
- Настроить трекинг/виржинг
- Группировать и экспортировать
# Это профессиональный подход: AI делает иконку, человек — типографику
```
### 7.4 Работа с ограниченным VRAM
```bash
# Командная строка ComfyUI для 12GB VRAM:
python main.py --port 8188 --lowvram --force.fp16
# Параметры для экономии VRAM:
# --force.fp16 → float16 (экономит ~30% VRAM)
# --lowvram → агрессивное выгружение в CPU
# --medvram → баланс между CPU и GPU
# --cpu → CPU mode (очень медленно, fallback)
# FLUX.1-dev fp8 — квантованная версия (меньше качество, но меньше VRAM)
huggingface-cli download black-forest-labs/FLUX.1-dev \
--include "flux-v1-fp8.safetensors" \
--local-dir ~/models/FLUX.1-dev-fp8/
```
### 7.5 Оптимизация LoRA для логотипов
```python
# В воркфлоу ComfyUI, при использовании LoRA:
# - lora_scale=0.3 для тонкой настройки стиля
# - lora_scale=0.6 для среднего влияния
# - lora_scale=0.8 для сильного влияния (может переборщить)
#
# Для чистых минималистичных логотипов лучше 0.3-0.5
# Для более "художественных" — 0.6-0.8
```
---
## ЧАСТЬ 8: АЛЬТЕРНАТИВНЫЕ ПОДХОДЫ
### 8.1 OmniSVG (NeurIPS 2025)
**OmniSVG** — первый end-to-end генератор SVG, который НЕ генерирует растр:
- Генерирует непосредственно SVG-код через VLM
- Параметризует команды SVG как дискретные токены
- Может генерировать сложные векторы напрямую
**Плюсы:** Настоящий SVG на выходе, нет стадии трассировки
**Минусы:** Требует VLM (большая модель, ~7B+), экспериментальный,
может быть нестабильным для простых логотипов
**Установка:**
```bash
git clone https://github.com/OmniSVG/OmniSVG.git
cd OmniSVG
pip install -e .
# Требуется PyTorch + transformers
```
### 8.2 SDXL + SVGStud.io fine-tune
SVGStud.io — SDXL, дообученный на генерацию изображений,
оптимизированных для последующей векторизации.
**Подход:** Генерируем с прицелом на чистую векторизацию:
- Минимум деталей
- Чёткие границы
- Ограниченная палитра (3-5 цветов)
- Высокий контраст
### 8.3 Полный Python-пайплайн (без GUI)
```python
#!/usr/bin/env python3
"""Self-hosted logo generation pipeline"""
from pathlib import Path
import subprocess
import json
import torch
import os
# 1. LLM prompt generation
def generate_prompts(brief: str, model_name: str = "qwen2.5:7b") -> list:
result = subprocess.run(
["ollama", "run", model_name],
input=f"""Ты — эксперт по логотипам. Сгенерируй 5 промптов:
Brief: {brief}
Формат JSON: [{{"prompt": "...", "negative": "..."}}, ...]""",
capture_output=True, text=True
)
return json.loads(result.stdout)
# 2. Image generation via ComfyUI API
def generate_with_comfyui(prompt: str, output_path: str, cfg: float = 4.0):
import requests
# Отправить промпт через ComfyUI API
# Загрузить workflow JSON с FLUX + LoRA
# Запустить генерацию
# Скачать результат
pass
# 3. Vectorization
def vectorize(input_path: Path, output_path: Path, mode="spline"):
subprocess.run([
"vtracer", "-i", str(input_path),
"-o", str(output_path), "-m", mode, "-p", "bw"
])
# 4. Post-process
def postprocess_svg(svg_path: Path, output_path: Path):
subprocess.run([
"inkscape", "--actions",
"select-all;object-unpath;paths-combine;path-simplify",
str(svg_path), "-o", str(output_path)
])
```
---
## СВОДНАЯ ТАБЛИЦА СТЕКА
| Компонент | Инструмент | Установка | VRAM | Лицензия |
|-----------|-----------|-----------|------|----------|
| LLM | Ollama + Qwen2.5-7B | `curl -fsSL https://ollama.com/install.sh \| sh` | 6GB | Apache 2.0 |
| LLM UI | Open WebUI | Docker / pip | 0 | AGPL-3.0 |
| Image Gen | ComfyUI + FLUX.1-dev | pip + huggingface-cli | 8-16GB | FLUX dev license |
| Logo LoRA | Shakker-Labs Logo-Design | huggingface-cli | +2GB | FLUX dev license |
| Vectorize | VTracer | cargo / pip / docker | 0 | Apache 2.0 |
| Editor | Inkscape | apt / flatpak | 1GB (RAM) | GPL-3.0 |
| Fonts | Google Fonts (local) | ручная загрузка | 0 | SIL OFL |
| SVG Process | Python svgelements | pip | 0 | MIT |
---
## ЗАКЛЮЧЕНИЕ
**Идеальный self-hosted стек для России (2026):**
```
1. Ollama (Qwen2.5-7B) → промпты для логотипов
2. ComfyUI + FLUX.1-dev-fp8 + Logo-Design LoRA → генерация
3. VTracer → векторизация
4. Inkscape → финальная доводка
5. Google Fonts (локально) → профессиональная типографика
```
**Ожидаемый результат:**
- 50-100 AI-концептов за 1-2 часа на 3080 Ti
- 5-10 лучших в векторе (SVG)
- 2-3 финальных варианта после ручной доводки (1-2 часа)
- Полная палитра: SVG, PDF, EPS, PNG (16px → 2048px), чёрная версия
**Итого время:** 1 день на полный цикл (brief → финальный логотип)
**Стоимость:** 0₽ (все инструменты open source)