Полный разбор пайплайна: Kandinsky 3.1, CDN-кеш, fallback FLUX и 152-ФЗ
Когда вы вставляете
pixinlink.ru/800x400/офис-программисты в img src,
происходит следующее: API принимает URL → вычисляет SHA-256 хеш параметров →
проверяет кеш → если изображения нет, отправляет задачу в очередь Celery →
переводит промпт через Yandex Translate → генерирует через Kandinsky 3.1
(или FLUX.1 как резервный) → оптимизирует WebP → сохраняет в Yandex Object Storage →
кеширует на 1 год в CDN с 140 точками присутствия.
Первый запрос: 8–10 секунд. Все последующие: менее 100 мс.
TL;DR
URL → SHA-256 хеш → Redis проверка →
• Кеш есть: 302 CDN URL, <100 мс, квота не тратится
• Кеша нет: SVG placeholder → Celery → Yandex Translate → Kandinsky 3.1
→ WebP → S3 → CDN (140 POP) → Redis
Первый запрос = 8 секунд (генерация).
Все повторные = мгновенно (кеш).
Инфраструктура: Yandex Cloud + Selectel, 152-ФЗ, Россия.
Ключевые факты
P95 latency первой генерации через Kandinsky 3.1
TTFB для кешированного изображения — CDN edge
точек присутствия Yandex Cloud CDN в РФ и СНГ
durability Yandex Object Storage — 99.999999999%
хеш параметров URL — immutable-кеш, никогда не перезаписывается
Kandinsky 3.1 primary + FLUX.1-schnell fallback
перезаписей S3-объектов — immutable, новый хеш = новый объект
opacity watermark на Free — вшит в пиксели, не CSS-слой
Ключевые понятия
AI-пайплайн
Цепочка обработки запроса: от текстового промпта до готового изображения. Включает трансляцию, улучшение промпта, нейросетевую генерацию, постобработку, загрузку в хранилище и CDN-доставку. В PixInLink — автоматический, асинхронный, с fallback-моделью.
Kandinsky 3.1
Российская диффузионная нейросеть от Sber (SberCloud). Обучена на русскоязычных данных — лучше понимает кириллические промпты, чем Midjourney или DALL-E. Первичная AI-модель в PixInLink. FLUX.1 — резервная.
CDN (Content Delivery Network)
Сеть серверов в разных городах, каждый хранит копию изображения. Yandex Cloud CDN: 140 точек присутствия в РФ и СНГ. Пользователь получает изображение с ближайшего сервера — скорость <100 мс.
Immutable кеш
Изображение записывается в S3 один раз и никогда не изменяется. URL содержит SHA-256 хеш всех параметров — любое изменение создаёт новый объект. Это гарантирует, что ваш og:image не изменится неожиданно.
Cache miss / Cache hit
Cache miss: изображения нет в кеше → нужна генерация (~8 сек). Cache hit: изображение уже создано → CDN отдаёт мгновенно (<100 мс), квота не расходуется. После первой генерации все повторные запросы — cache hit.
Диффузионная модель
Класс нейросетей, обученных генерировать изображения из случайного шума под управлением текста. Kandinsky не хранит готовые фото — он создаёт их заново каждый раз. Аналогия: не библиотека, а художник, который рисует по описанию.
Как работает «магия»?
Вы вставляете URL в HTML, а браузер получает уникальное изображение. Откуда оно берётся? Это не стоковое фото. Это не шаблон из базы данных. Это генерация искусственным интеллектом — специально для вашего запроса, в реальном времени.
Если вы впервые запрашиваете изображение, браузер покажет SVG-заглушку на 8–10 секунд, пока нейросеть Kandinsky 3.1 рисует картинку. Это нормально: холодный старт. После первой генерации изображение кешируется на 1 год — все последующие запросы мгновенны.
Почему это важно: запросы о «медленности» и «стоковости» — самые частые у новых пользователей. Эта страница отвечает на оба: медленность — это холодный старт CDN, уникальность — это диффузионная нейросеть, а не база фотографий.
Как PixInLink генерирует изображения из URL?
PixInLink принимает URL вида pixinlink.ru/800x400/офис-разработчиков,
вычисляет SHA-256 хеш параметров и проверяет CDN-кеш. Если изображение уже генерировалось
— возвращает его мгновенно (<100 мс). Если нет — создаёт задачу:
переводит промпт на английский (Yandex Translate), генерирует через
Kandinsky 3.1 или FLUX.1,
оптимизирует в WebP, сохраняет в Yandex Object Storage и кеширует на
1 год через CDN (140 POP).
Первый запрос: 8–10 секунд. Повторные: менее 100 мс.
10 шагов от URL до изображения: полный пайплайн
Браузер → API Gateway (FastAPI)
0–5 мсБраузер отправляет GET-запрос. API на FastAPI (Python 3.12) принимает и парсит URL.
GET /800x400/ffffff/000000?prompt=офис-программисты&style=realistic&seed=42
Валидация: width/height 16–8192, HEX 6 символов, prompt не пустой. Если что-то не так → 400 Bad Request.
SHA-256 хеш — уникальный отпечаток запроса
<1 мсAPI вычисляет SHA-256 от нормализованных параметров. Каждая уникальная комбинация = уникальный ассет:
hash = SHA256("800x400/ffffff/000000?prompt=office&style=realistic&seed=42")
→ abc123def456...
Одинаковый prompt + seed = одинаковый хеш = тот же кешированный файл. Изменили seed — новый хеш — новое изображение.
Проверка кеша — Redis
1–3 мс✅ Cache HIT: CDN URL найден → 302 Redirect на CDN. Квота не тратится. Конец.
🔴 Cache MISS: URL не найден → переходим к шагу 4.
SVG Placeholder — немедленный ответ браузеру
5–10 мсAPI сразу возвращает SVG-заглушку (200 OK, ~200 байт) с заголовком X-Job-Id. SVG показывает фон цвета bg= с текстом «Generating image...». Браузер не ждёт 8 секунд — видит заглушку немедленно. Параллельно API создаёт запись в PostgreSQL (status=pending) и отправляет задачу в очередь Celery.
Celery Queue — асинхронная очередь задач
0–2 сек ожиданияЗадача появляется в Redis-очереди. Celery Worker берёт её. Приоритеты: high — Enterprise/Pro, default — обычные, bulk — batch. Пул: 3 GPU-воркера × concurrency=2 = 6 параллельных генераций одновременно. При длине очереди >50 → auto-scale добавляет воркер.
Улучшение промпта: Yandex Translate + Style Augmentation
0.5–1 секТри операции подряд:
- Transliteration: «офис разработчиков» → Yandex Translate →
"office of developers" - Style Augmentation: добавляется
", photorealistic, 8k, high detail" - Negative prompt:
"blurry, low quality, distorted"
Диффузионные модели обучены преимущественно на английских данных. Yandex Translate + нативная RU-обучка Kandinsky = лучшее качество для кириллических промптов.
AI-генерация: Kandinsky 3.1 или FLUX.1-schnell
5–8 сек (Kandinsky) / 2–4 сек (FLUX)PRIMARY: Kandinsky 3.1
POST /v1/generate → {model: "kandinsky-3.1", prompt, width, height, seed}
Ответ: base64-encoded PNG.
Обучен на RU-данных. Хостинг: SberCloud (Россия, 152-ФЗ).
FALLBACK: FLUX.1-schnell
Self-hosted на Selectel RTX 4090 (Россия).
diffusers pipeline, 4 inference steps.
Переключение автоматическое: если Kandinsky → 5xx или timeout.
💡 Для вас это невидимо: даже если Kandinsky недоступен, изображение всё равно будет сгенерировано — через FLUX, автоматически.
Постобработка: Image Processor (Pillow + libvips)
0.3–0.5 сек- Decode: base64 → PIL Image
- Resize:
ImageOps.fit(width, height, LANCZOS)— точное кадрирование - Watermark (только Free): текст «Made with PixInLink.com», bottom-right, 30% opacity. Вшивается в пиксели — нельзя убрать через CSS или DevTools
- Format: WebP quality=85, метод 6 → ~50KB vs ~300KB PNG. В 6 раз меньше → лучше PageSpeed
- Strip EXIF/IPTC: все метаданные удаляются. Ваши промпты не хранятся в файле
Загрузка в Yandex Object Storage (S3)
0.2–0.5 секKey: images/{sha256_hash}.webp
Cache-Control: public, max-age=31536000, immutable
x-amz-acl: public-read
Durability: 99.999999999%
Объект никогда не перезаписывается. Новые параметры → новый хеш → новый объект. Ваш og:image не изменится неожиданно.
CDN-кеш и финал
async (CDN кеширует при первом запросе к Origin)- CDN: Yandex Cloud CDN, 140 POP по России и СНГ
- Redis:
SET image:{hash} cdn_url EX 2592000(30 дней) - PostgreSQL:
status=ready, cdnurl=..., generated_at=now() - Следующий запрос с тем же URL → CDN edge → <100 мс ✅
Схема пайплайна: от URL до изображения
flowchart TD
A["Браузер: GET /800x400/офис"] --> B["API Gateway — FastAPI"]
B --> C{"Redis Cache Check"}
C -->|"Cache HIT"| D["302 CDN URL <100 мс ✅"]
C -->|"Cache MISS"| E["SVG Placeholder 200 OK"]
E --> F["Celery Queue — Redis Broker"]
F --> G["Celery Worker"]
G --> H["Yandex Translate RU → EN"]
H --> I{"AI Provider"}
I -->|"Primary"| J["Kandinsky 3.1 SberCloud ~8 сек"]
I -->|"Fallback"| K["FLUX.1-schnell Selectel RTX 4090 ~4 сек"]
J --> L["Image Processor Pillow: resize, WebP, watermark"]
K --> L
L --> M["Yandex Object Storage S3 immutable"]
M --> N["Yandex CDN 140 POP"]
N --> O["Redis UPDATE image:{hash}"]
O --> P["Следующий запрос → Cache HIT <100 мс ✅"]
Почему первый запрос медленный, а повторный мгновенный?
🎂 Аналогия: кондитерская
Представьте, что вы заказываете торт в кондитерской. Первый раз — кондитер печёт его специально для вас (8–10 минут). Но умный кондитер знает: если кто-то закажет такой же — он уже есть в витрине. Следующий покупатель получит его мгновенно. PixInLink работает так же: первая генерация — кулинарный процесс, все последующие — готовый торт в витрине CDN.
| Параметр | Cache MISS | Cache HIT |
|---|---|---|
| Время ответа | 8–10 секунд | <100 мс |
| Что возвращает API | 200 SVG placeholder | 302 CDN URL |
| Расход квоты | Да, 1 кредит | Нет |
| Когда происходит | Первый запрос | Все повторные |
| CDN задействован | Нет (идёт генерация) | Да (edge cache) |
| GPU используется | Да | Нет |
💡 500 генераций на Starter — это 500 уникальных промптов. Один промпт можно запрашивать миллион раз — квота тратится 1 раз при первой генерации.
Гарантия уникальности: это не стоковые фото
Каждое изображение — новая нейросетевая генерация. Kandinsky 3.1 — диффузионная модель: она не хранит готовые фотографии, а создаёт изображения из случайного шума, управляемого текстовым описанием. Kandinsky не «выбирает» — он «рисует».
| Миф | Факт |
|---|---|
| ❌ PixInLink берёт фото из стоков | ✅ Генерация через Kandinsky 3.1 (диффузионная нейросеть) |
| ❌ Изображения совпадут у разных пользователей | ✅ seed=random → каждый раз разные |
| ❌ Нарушаются авторские права | ✅ Kandinsky обучен на лицензионных данных SberCloud |
| ❌ Изображение изменится через месяц | ✅ Immutable CDN-кеш, hash-based URLs |
| ❌ Первый медленный запрос — это баг | ✅ Cold start: нейросеть рисует впервые для этого промпта |
Надёжность: что происходит, если AI недоступен?
Kandinsky 3.1 (primary)
SberCloud API, Россия. При 5xx или timeout → автоматический переход на FLUX.1.
FLUX.1-schnell (fallback)
Self-hosted на Selectel RTX 4090, Россия. Если Kandinsky упал — FLUX генерирует напрямую.
Retry с backoff
Celery max_retries=3, задержка 60 сек. Если все попытки исчерпаны → email-уведомление.
| Компонент | Сбой | Реакция системы | Видимость для вас |
|---|---|---|---|
| Kandinsky API | 502/503/timeout | Auto-switch → FLUX.1 | Нет (чуть медленнее) |
| FLUX.1 worker | OOM/crash | Retry → другой GPU | Нет |
| Redis | Connection error | API → 503, retry | Заглушка дольше |
| PostgreSQL | Unavailable | Circuit breaker, 503 | Страница ошибки 503 |
| CDN | Edge node down | Yandex CDN → другой POP | Нет |
| S3 | Upload fail | Worker retry × 3 | Задержка +1–2 мин |
Circuit Breaker: при 5 подряд ошибках Kandinsky → Circuit Breaker открывается на 60 сек. Все запросы идут прямо в FLUX. После 60 сек — пробный запрос к Kandinsky. Если OK — Circuit Breaker закрывается.
Российская инфраструктура: соответствие 152-ФЗ
| Компонент | Провайдер | Локация |
|---|---|---|
| API Gateway | Yandex Serverless Functions | ru-central1 (Москва/Ярославль) |
| Redis Cache | Yandex Managed Redis Lighthouse | ru-central1 |
| PostgreSQL | Yandex Managed PostgreSQL 16 | ru-central1 |
| Object Storage | Yandex Object Storage | ru-central1 |
| CDN | Yandex Cloud CDN | 140 POP РФ + СНГ |
| AI Primary | Kandinsky 3.1 | SberCloud, Россия |
| AI Fallback | FLUX.1-schnell | Selectel, Россия |
| GPU Workers | Selectel RTX 4090 | Санкт-Петербург, Россия |
- lockS3 at-rest encryption: AES-256
- lockHTTPS everywhere: TLS 1.3, managed certificates
- lockEXIF stripping: метаданные удаляются из каждого изображения
- lockДанные за рубеж не передаются: вся инфраструктура в РФ
Seed: воспроизводимые изображения для og:image
Seed — это «рецепт» изображения. Добавьте &seed=42 в URL — и PixInLink
всегда нарисует одно и то же изображение для одного промпта. Без seed — каждый раз разное.
С seed — всегда одинаковое.
Для og:image стабильность критична: если сегодня у статьи один og:image,
а завтра другой — соцсети покажут старую версию из своего кеша. Решение: зафиксируй seed.
Без seed
pixinlink.ru/1200x630?prompt=кот
Random seed каждый раз → разные изображения → не кешируется. Подходит для декоративных элементов.
С фиксированным seed
pixinlink.ru/1200x630?prompt=кот&seed=42
Стабильный CDN-кеш. Идеально для og:image и заголовков статей.
Seed из slug (идеальный паттерн)
slug = "kak-pit-kofe" seed = crc32(slug) % 2147483647 # seed=847392145
CRC32 slug → детерминированное число. Каждый slug = уникальное, но стабильное изображение.
Частые вопросы
Почему первое изображение генерируется медленнее?
Cache miss — нейросеть Kandinsky 3.1 рисует специально для этого запроса. P95 = 8 секунд. Все повторные запросы отдаются из CDN: <100 мс. Квота при cache hit не расходуется.
Расходуется ли квота при повторном запросе?
Нет. Cache hit не расходует квоту. 500 генераций на Starter — это 500 уникальных промптов. Один промпт можно запрашивать любое количество раз — квота тратится 1 раз при первой генерации.
Kandinsky или FLUX.1 — какую модель выбрать?
Выбор происходит автоматически. Kandinsky 3.1 — первичная модель, лучше для русских промптов (8 сек). FLUX.1 — резервная, немного быстрее (4 сек). Принудительный выбор модели доступен в REST API для тарифа Pro.
Изображения хранятся вечно?
CDN-кеш = 1 год. В Yandex Object Storage: 180 дней → Cold Storage, 365 дней → удаление (lifecycle policy). После удаления следующий запрос = новая генерация.
Могут ли два пользователя получить одинаковое изображение?
При одинаковом prompt + seed — да, CDN отдаст тот же кешированный файл. Изображение уникально создано для этого промпта. Хотите гарантированную уникальность — не указывайте seed (random каждый раз).
Как обрабатываются запрещённые промпты?
Kandinsky 3.1 имеет встроенный content policy filter. Запросы с NSFW, насилием и запрещённым контентом отклоняются. PixInLink дополнительно проверяет на уровне API Gateway.
Можно ли использовать изображения коммерчески?
Да, на платных тарифах (без watermark) — полные коммерческие права. На Free (с watermark) — личное использование. Подробнее: pixinlink.ru/terms.
Сколько GPU-ресурсов на одну генерацию?
Kandinsky 3.1 API — GPU на стороне SberCloud. FLUX.1 self-hosted: RTX 4090, 24 GB VRAM, concurrency=2 на worker. При высокой нагрузке (utilization >85%) auto-scale добавляет GPU-воркеры автоматически.
Об этом материале
Архитектура PixInLink разработана командой с опытом в SaaS, distributed systems и computer vision. Все решения задокументированы в Architecture Decision Records (ADR): ADR-007 (Kandinsky/FLUX fallback), ADR-010 (Watermark). Мониторинг 24/7 через Grafana + Telegram-алерты.
- verifiedКодовые примеры актуальны для FastAPI 0.115, Celery 5.4, Python 3.12
- verifiedТехнические данные взяты из architecture/components.md и ADR-документов
- verifiedДата обновления: май 2026
- verifiedПоддержка: dev@pixinlink.ru · @pixinlinksupport
Попробуйте пайплайн в действии
Первые 50 генераций бесплатно. Без регистрации и кредитной карты.
Вопросы по архитектуре: dev@pixinlink.ru


