Генерация иллюстрации к посту

Создано: 2026-02-11 03:24 Время чтения: 4 мин

Шаги

  1. Посмотреть прошлые промпты в _generate_image_history.md
    • взять ~20% от предыдущего промпта для визуальной связи между картинками
    • это создаёт узнаваемый стиль серии (человек в кадре, перспектива, горизонтальные линии)
    • после удачной генерации добавить запись в формате:
## [[Название поста]]

![[имя_картинки.webp]]

промпт который использовался
  1. Выбрать стиль из секции «Стили» ниже
  2. Найти ключевой образ поста
    • это самая сильная метафора или визуальный момент
    • примеры: «бежать всегда», «чистка зубов», «тихая победа в 7 утра»
  3. Выделить 2 ярких образа из текста
    • эти образы должны быть чётко видны и выделены на картинке
    • они создают визуальный якорь и запоминаемость
    • пример: человек + бесконечная дорога; чашка кофе + рассветное окно
    • главный герой — бородатый мужчина (чаще всего) — это создаёт узнаваемость серии
    • картинка должна одинаково хорошо смотреться в тёмной и светлой темах
    • избегай чисто чёрного (#000) или чисто белого (#FFF) фона — используй тёмно-серый (#1a1a1a) или светло-серый (#f0f0f0)
    • обязательно: один предмет цветной — остальное монохром, один объект выделен цветом (золотой, синий, красный). Это создаёт фокус и узнаваемый стиль серии
    • элементы лаборатории/инженерии — если подходит по смыслу, добавлять: колбы, пробирки, шестерёнки, микросхемы, провода, платы, механизмы, чертежи. Это связывает иллюстрации с брендом «Лаборатория инструкций» и создаёт визуальную серию
  4. Описать сцену одним предложением
    • кто/что в кадре, что делает, какое настроение
    • пример: «человек идёт один по дороге на рассвете, дорога уходит в туман»
  5. Собрать промпт в JSON формате (предпочтительно)
    • JSON даёт более точный контроль над позиционированием и деталями
    • текстовый промпт использовать только для простых сцен с одним объектом
  6. Сгенерировать изображение
    • запустить скрипт /tmp/generate_image.py с промптом
    • скрипт сохранит картинку в founder/assets/
  7. Собрать финальную иллюстрацию по HTML-инфографика поверх картинки
    • подробная инструкция со скриптами, шаблонами и частыми ошибками — в отдельном файле
  8. Прикрепить к посту как шапку
    • добавить ![[название.webp]] в самое начало заметки (после frontmatter)

Важно: сгенерированную чистую картинку сохранять в /tmp/clean_bg*.png, а не сразу в founder/assets/. В assets сохраняется только финальная инфографика (после наложения текста). Иначе при повторном рендере текст задвоится.


Генератор

Модель: fal-ai/flux-2 (dev)

Лёгкая, быстрая, качественная. Подходит для итераций и массовой генерации.


Инструкции по FLUX.2

Почему структурированные промпты

Традиционные промпты описывают сцену. Структурированные — определяют сцену.

FLUX.2 понимает иерархические промпты. Можно разбить сцену на компоненты:

  • Subjects (объекты и персонажи)
  • Poses (позы и действия)
  • Positions (расположение в кадре)
  • Backgrounds (фон)
  • Camera settings (камера)
  • Lighting (освещение)
  • Style and mood (стиль и настроение)

Структурированные промпты дают превосходную консистентность для:

  • Архитектурных макетов
  • Иллюстраций с несколькими персонажами
  • Брендированных визуалов
  • Серий изображений в едином стиле

JSON-промпты

Самый точный способ контролировать генерацию. Вместо прозы — объекты и атрибуты.

Базовая структура:

{
  "scene": "Общее описание сцены",
  "subjects": [
    {
      "type": "Категория (person/object/animal/furniture/text_element)",
      "description": "Физические детали",
      "pose": "Действие или поза",
      "position": "foreground/midground/background"
    }
  ],
  "style": "Художественный стиль",
  "color_palette": ["#цвет1", "#цвет2", "#цвет3"],
  "lighting": "Освещение и направление света",
  "mood": "Эмоциональная атмосфера",
  "background": "Описание фона",
  "composition": "rule of thirds/centered/dynamic diagonal",
  "camera": {
    "angle": "eye level/low angle/high angle/slightly elevated 3/4 view",
    "distance": "close-up/medium shot/wide shot",
    "lens": "20mm/35mm/50mm/85mm",
    "fNumber": "f/2.8/f/5.6/f/9",
    "iso": 100
  }
}

Расширенный пример (архитектура):

{
  "industry": "Architecture",
  "scene": "A contemporary parametric museum photographed in overcast light",
  "subjects": [
    {
      "type": "cultural_building",
      "pose": "static",
      "position": "midground",
      "details": "continuous curved envelope, perforated metal skin, fluid geometry"
    }
  ],
  "style": "soft editorial architecture photography",
  "mood": "futuristic, artistic, elegant",
  "background": "open plaza and diffused sky",
  "camera": {
    "angle": "slightly upward",
    "distance": "wide framing",
    "lens": "20mm",
    "fNumber": "f/9",
    "iso": 100
  }
}

JSON особенно полезен для:

  • Нескольких объектов в кадре с точным позиционированием
  • Сохранения атрибутов в сложных сценах
  • Контроля размера объектов (указывать в position: "small - takes 1/4 of frame")
  • Wireframe/схематичных элементов (указывать в description: "WIREFRAME ONLY - thin white grid lines")

HEX-цвета

Для точного цветового соответствия используй HEX-коды с ключевым словом color или hex:

"a wall painted in color #2ECC71"
"gradient from hex #FF6B6B to hex #4ECDC4"
"the car in color #1A1A1A with accents in #FFD700"
"solid dark gray background hex #1a1a1a"

Для повышения точности: добавь референс цветовой палитры (color swatch image) вместе с HEX-кодом.


Референсы через @

Ссылайся на загруженные изображения через @ для multi-image workflows:

"@image1 wearing the outfit from @image2"
"combine the style of @image1 with the composition of @image2"
"the person from @image1 in the setting from @image3"

Синтаксис @ — естественный способ ссылаться на несколько изображений. Также поддерживается традиционная индексация "image 1", "image 2".


Seed для воспроизводимости

Используй одинаковый seed для получения похожих вариаций при итерациях.

Код генерации

Скрипт /tmp/generate_image.py:

#!/usr/bin/env python3
"""
Генерация изображений через fal.ai FLUX.2

Использование:
  python /tmp/generate_image.py "имя_файла.webp" "промпт"

Пример:
  python /tmp/generate_image.py "my_image.webp" "A cat sitting on a chair, architectural drawing style"
"""

import os
import sys
import fal_client
import requests
from PIL import Image
from io import BytesIO

ASSETS_DIR = "/Users/alexey/projects/secondbrain/founder/assets"

def load_fal_key():
    env_path = "/Users/alexey/projects/secondbrain/.env"
    with open(env_path) as f:
        for line in f:
            if line.startswith("export FAL_KEY="):
                return line.replace("export FAL_KEY=", "").strip()
    raise ValueError("FAL_KEY not found in .env")

def generate_image(filename: str, prompt: str):
    os.environ["FAL_KEY"] = load_fal_key()

    print(f"Generating: {filename}")
    print(f"Prompt: {prompt}\n")

    result = fal_client.subscribe(
        "fal-ai/flux-2",
        arguments={
            "prompt": prompt,
            "guidance_scale": 2.5,
            "num_inference_steps": 28,
            "image_size": "landscape_16_9",
            "num_images": 1,
            "enable_safety_checker": True,
            "output_format": "jpeg"
        },
    )

    image_url = result["images"][0]["url"]
    print(f"URL: {image_url}")

    response = requests.get(image_url)
    img = Image.open(BytesIO(response.content))
    output_path = os.path.join(ASSETS_DIR, filename)
    img.save(output_path, "WEBP", quality=90)

    print(f"Saved: {output_path}")
    return output_path

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: python /tmp/generate_image.py <filename.webp> <prompt>")
        print('Example: python /tmp/generate_image.py "test.webp" "A mountain landscape"')
        sys.exit(1)

    filename = sys.argv[1]
    prompt = sys.argv[2]
    generate_image(filename, prompt)

Параметры:

  • guidance_scale: 2.5 — баланс между промптом и креативностью
  • num_inference_steps: 28 — качество (больше = лучше, но дольше)
  • image_size: landscape_16_9, landscape_4_3, square, portrait_3_4
  • quality: 90 — качество webp (0-100)

Запуск:

python /tmp/generate_image.py "image_name.webp" "твой промпт здесь"

Стили

Мягкий туман

Размытые края, пастельные тона, утренняя тишина. Один объект в центре, много воздуха вокруг.

Общие элементы:

  • Мягкий фокус, размытый фон
  • Пастельные/приглушённые цвета (серо-голубой, бежевый, молочный)
  • Много негативного пространства
  • Один силуэт или объект
  • Ощущение тишины и покоя
  • Утренний или вечерний мягкий свет

Текстовый промпт:

[сцена], soft focus, misty atmosphere, pastel tones, morning light, ethereal, minimalist composition, negative space, peaceful mood, quiet solitude

JSON промпт:

{
  "scene": "[описание сцены]",
  "subjects": [
    {
      "type": "person/object",
      "description": "[описание]",
      "position": "midground"
    }
  ],
  "style": "ethereal photography, soft focus",
  "color_palette": ["#E8E4E1", "#B8C4CE", "#D4C5B9"],
  "lighting": "soft morning light, diffused through fog",
  "mood": "peaceful solitude, quiet contemplation",
  "composition": "minimalist, negative space",
  "camera": {
    "angle": "eye level",
    "distance": "wide shot",
    "lens": "35mm"
  }
}

Технический чертёж

Смесь архитектурной графики (blueprints, аксонометрия, скетчи) с digital art эстетикой — noise, grain, геометрическая абстракция. Ламповая электроника и кусочки кода.

Общие элементы:

  • Монохром: чёрный фон с белыми линиями или белый фон с чёрной графикой
  • Акценты минимальны — приглушённый синий, зелёный, иногда красный
  • Тонкие, точные линии как в CAD или от руки рапидографом
  • Много параллельных линий, сетки, ортогональных пересечений
  • Аксонометрические проекции без перспективного искажения
  • Линии "выходят за пределы" объектов — ощущение незавершённости
  • Зернистость (grain/noise) как на старой фотобумаге
  • Асимметричная, но сбалансированная композиция
  • Много воздуха и пустого пространства
  • Мелкие технические пометки, цифры, условные обозначения
  • Ламповые схемы — радиолампы (vacuum tubes) с видимыми нитями накала, стеклянными колбами и анодами
  • Кусочки кода на Go — изредка в углу или на заднем плане: func main(), go func(), chan, defer

Ключевые слова для промпта:

architectural drawing, axonometric projection, technical blueprint, wireframe, CAD aesthetic, grain texture, monochrome with accent color, deconstructivist, floating geometric forms, white lines on black background, risograph texture, construction documents style, vacuum tubes with glowing filaments, vintage radio electronics, subtle Golang code snippets

Текстовый промпт:

[сцена]. Style: architectural drawing, axonometric projection, technical blueprint, wireframe, CAD aesthetic, grain texture, monochrome with accent color, white lines on black background, risograph texture. Thin precise lines like CAD or rapidograph pen. Parallel lines, grids, orthogonal intersections. Lines extend beyond objects creating sense of incompleteness. Grainy texture. Asymmetric but balanced composition. Technical annotations floating around. Minimalist, lots of negative space. Decorative vacuum tubes with visible glowing filaments scattered in composition. Occasional Golang code fragments floating in background.