- 74 brands: airbnb, stripe, apple, figma, linear, vercel, etc. - 147 files: DESIGN.md + README.md per brand (~2.1 MB) - Each DESIGN.md contains structured brand analysis (colors, typography, components) - Updated 00-overview.md with new design-systems directory
813 lines
30 KiB
Markdown
813 lines
30 KiB
Markdown
# 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)
|