Процедурная генерация картины по мотивам «Девятого вала» И. К. Айвазовского (1850) — на Python, Pillow и NumPy.
Проект программно создаёт морской пейзаж, воспроизводящий ключевые композиционные элементы знаменитой картины Айвазовского:
- Небо на рассвете — многоступенчатый градиент от тёмно-пурпурного к золотому горизонту с фрактальными облаками
- Солнце — многослойное свечение с ярким ядром
- Девятый вал — асимметричный гребень с пеной и брызгами
- Слои моря — многослойные волны с освещёнными гребнями
- Обломки корабля — сломанная мачта с силуэтами выживших
- Пост-обработка — цветокоррекция, масляное смешение, зерно холста, виньетка
git clone https://github.com/akarakuts/ninth-wave.git
cd ninth-wave
pip install -r requirements.txtpython3 ninth_wave.pyИзображение сохраняется в output/ninth_wave_pil.png (1600×1080).
Генерация занимает 10–30 секунд в зависимости от железа.
Параметры задаются в начале файла ninth_wave.py:
| Параметр | Описание | По умолчанию |
|---|---|---|
W, H |
Размер изображения | 1600, 1080 |
random.seed(...) |
Seed для воспроизводимости | 101 |
horizon |
Высота горизонта (доля от H) | H * 0.45 |
peak_x |
Позиция пика волны (доля от W) | W * 0.60 |
- Небо — вертикальный градиент по цветовым стопам, смешанный с шумом фрактального броуновского движения (fbm) для облаков
- Солнце — концентрические эллипсы с убывающей прозрачностью для радиального свечения
- Море — синусоидальные композиты на нескольких частотах, накладываемые сзади наперёд
- Главная волна — асимметричный гауссов профиль с многооктавной рябью; сплошная заливка полигона + вертикальный градиент
- Свечение гребня — полупрозрачный слой, имитирующий прохождение света сквозь тонкую воду (фирменный приём Айвазовского)
- Пена — тысячи мелких эллипсов, сконцентрированных у гребня волны
- Пост-обработка — усиление контраста/цвета, смешение с размытой копией для эффекта «масляной краски», добавление зерна, применение виньетки
Это стилизованная абстракция, а не фотореалистичная копия. Процедурная отрисовка на PIL имеет принципиальные ограничения:
- Нет настоящих мазков кисти и фактуры краски
- Прозрачность волны имитируется альфа-градиентами, а не физически точно
- Пена строится точками, а не методами гидродинамики
Для фотореалистичной генерации рассмотрите использование API нейросетевой генерации изображений (например, qwen-image-3.0-pro).
