Ascii Video
On this page ASCII video: конвертирование видео/аудио в цветной ASCII MP4/GIF.
Метаданные навыка¶
| Источник | Встроенный (установлен по умолчанию) |
| Путь | skills/creative/ascii-video |
| ## Справочник: полный SKILL.md | |
| info | |
| Ниже приведено полное описание навыка, которое Hermes загружает при его активации. Это то, что агент видит в качестве инструкций, когда навык активен. | |
| # Конвейер производства ASCII-видео | |
| ## Когда использовать | |
| Используйте, когда пользователи запрашивают: ASCII видео, текстовое арт-видео, видео в стиле терминала, анимацию из символьных изображений, ретро-текстовую визуализацию, аудиовизуализатор в ASCII, конвертирование видео в ASCII-арт, матричные эффекты или любой анимированный ASCII-вывод. | |
| ## Что внутри | |
| Производственный конвейер для ASCII-арт видео — любого формата. Преобразует видео/аудио/изображения/генеративный ввод в цветной ASCII-символьный видеовыход (MP4, GIF, последовательность изображений). Охватывает: преобразование видео в ASCII, аудиореактивные музыкальные визуализаторы, процедурные анимации ASCII-арта, гибридное видео+аудио реактивное, текстовые/лирические наложения, рендеринг в реальном времени для терминала. | |
| ## Творческий стандарт | |
| Это визуальное искусство. ASCII-символы — это среда; кинематограф — это стандарт. | |
| Прежде чем написать хотя бы одну строку кода, сформулируйте творческую концепцию. Какое настроение? Какую визуальную историю это рассказывает? Что делает ЭТОТ проект непохожим на все другие ASCII-видео? Запрос пользователя — это отправная точка; интерпретируйте его с творческой амбицией, а не буквальным воспроизведением. | |
| Превосходство с первого рендера — это обязательное условие. Вывод должен быть визуально впечатляющим без необходимости в итерациях доработки. Если что-то выглядит шаблонно, плоско или как «AI-сгенерированный ASCII-арт», это неправильно — переосмыслите творческую концепцию перед сдачей. | |
| Выходите за рамки словаря из справки. Каталоги эффектов, предустановки шейдеров и библиотеки палитр из справочников — это начальный словарный запас. Для каждого проекта комбинируйте, изменяйте и создавайте новые паттерны. Каталог — это палитра красок — вы пишете картину. | |
| Будьте проактивно креативны. Расширяйте словарь навыка, когда этого требует проект. Если в справочниках нет того, что нужно для вашего замысла, создайте это. Включите хотя бы один визуальный момент, о котором пользователь не просил, но который он оценит — переход, эффект, цветовое решение, возвышающее всё произведение. | |
| Целостная эстетика важнее технической правильности. Все сцены в видео должны ощущаться связанными единым визуальным языком — общая цветовая температура, родственные палитры символов, согласованный словарь движения. Технически правильное видео, где каждая сцена использует случайный эффект, — это эстетический провал. | |
| Плотный, многослойный, продуманный. Каждый кадр должен вознаграждать просмотр. Никогда не используйте плоские чёрные фоны. Всегда многокомпонентная композиция. Всегда вариация по сценам. Всегда осмысленный цвет. | |
| ## Режимы | |
| Режим | Ввод |
| --- | --- |
| Видео-в-ASCII | Видеофайл |
| Аудиореактивный | Аудиофайл |
| Генеративный | Нет (или параметры зерна) |
| Гибридный | Видео + аудио |
| Текст/лирика | Аудио + текст/SRT |
| TTS-озвучка | Текстовые цитаты + TTS API |
| ## Стек | |
| Один самостоятельный Python-скрипт на проект. GPU не требуется. | |
| Слой | Инструмент |
| --- | --- |
| Ядро | Python 3.10+, NumPy |
| Сигналы | SciPy |
| Изображения | Pillow (PIL) |
| Видео ввод/вывод | ffmpeg (CLI) |
| Параллелизм | concurrent.futures |
| TTS | ElevenLabs API (опционально) |
| Опционально | OpenCV |
| ## Архитектура конвейера | |
| Каждый режим следует одному и тому же 6-этапному конвейеру: | |
| [code] | |
| INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADE → ENCODE |
[/code]
1. INPUT — Загрузка/декодирование исходного материала (кадры видео, аудиосэмплы, изображения или ничего)
2. ANALYZE — Извлечение покадровых характеристик (аудиодиапазоны, яркость/границы видео, векторы движения)
3. SCENE_FN — Функция сцены рендерит на пиксельный холст (uint8 H,W,3). Компонует несколько символьных сеток через _render_vf() + пиксельные режимы смешивания. См. references/composition.md
4. TONEMAP — Адаптивная нормализация яркости на основе процентилей. См. references/composition.md § Адаптивный тонмап
5. SHADE — Постобработка через ShaderChain + FeedbackBuffer. См. references/shaders.md
6. ENCODE — Передача сырых RGB-кадров в ffmpeg для H.264/GIF-кодирования
Творческое направление¶
Эстетические измерения¶
Измерение| Варианты| Справочник
---|---|---|---
Палитра символов| Градиенты плотности, блочные элементы, символы, письменности (катакана, греческий, руны, брайль), специфичные для проекта| architecture.md § Палитры
Цветовая стратегия| HSV, OKLAB/OKLCH, дискретные RGB-палитры, автогенерируемая гармония, монохром, температура| architecture.md § Цветовая система
Фоновая текстура| Синусоидальные поля, шум fBM, деформация области, вороного, реакция-диффузия, клеточные автоматы, видео| effects.md
Основные эффекты| Кольца, спирали, туннель, вихрь, волны, интерференция, сияние, огонь, SDF, странные аттракторы| effects.md
Частицы| Искры, снег, дождь, пузыри, руны, орбиты, стайные боиды, последователи потока, следы| effects.md § Частицы
Настроение шейдера| Ретро ЭЛТ, чистый современный, глитч-арт, кинематографичный, мечтательный, индустриальный, психоделический| shaders.md
Плотность сетки| xs(8px) через xxl(40px), смешанная по слоям| architecture.md § Система сеток
Координатное пространство| Декартово, полярное, мозаичное, повёрнутое, рыбий глаз, Мёбиус, деформированное| effects.md § Трансформации
Обратная связь| Зум-туннель, радужные следы, призрачное эхо, вращающаяся мандала, цветовая эволюция| composition.md § Обратная связь
Маскирование| Круг, кольцо, градиент, текстовый трафарет, анимированная ириса/шторка/растворение| composition.md § Маскирование
Переходы| Кроссфейд, шторка, растворение, глитч-разрез, ириса, раскрытие через маску| shaders.md § Переходы
Вариация по секциям¶
Никогда не используйте одну и ту же конфигурацию для всего видео. Для каждой секции/сцены: * Другой фоновый эффект (или компонуйте 2-3) * Другая палитра символов (подходящая под настроение) * Другая цветовая стратегия (или как минимум другой оттенок) * Варьируйте интенсивность шейдера (больше блюма на пиках, больше зернистости в затишье) * Другие типы частиц, если частицы активны
Специфичное для проекта изобретение¶
Для каждого проекта придумайте как минимум одно из: * Пользовательскую палитру символов, соответствующую теме * Пользовательский фоновый эффект (комбинируйте/модифицируйте существующие блоки) * Пользовательскую цветовую палитру (набор дискретных RGB, соответствующий бренду/настроению) * Пользовательский набор символов для частиц * Новаторский переход между сценами или визуальный момент
Не просто выбирайте из каталога. Каталог — это словарный запас — вы пишете поэму.
Рабочий процесс¶
Шаг 1: Творческое видение¶
Прежде чем писать код, сформулируйте творческую концепцию: * Настроение/атмосфера: Что должен чувствовать зритель? Энергично, медитативно, хаотично, элегантно, зловеще? * Визуальная история: Что происходит в течение длительности? Нарастание напряжения? Трансформация? Растворение? * Цветовой мир: Тёплый/холодный? Монохромный? Неон? Землистые тона? Какой доминирующий оттенок? * Текстура символов: Плотные данные? Редкие звёзды? Органические точки? Геометрические блоки? * Что делает ЭТО особенным: Какая одна вещь делает этот проект уникальным? * Эмоциональная дуга: Как развиваются сцены? Начать с энергии, нарастить к кульминации, разрешить?
Сопоставьте запрос пользователя с эстетическими решениями. «Расслабленный lo-fi визуализатор» требует совершенно другого подхода, чем «глитч-киберпанк поток данных».
Шаг 2: Технический дизайн¶
- Режим — какой из 6 режимов выше
- Разрешение — ландшафт 1920x1080 (по умолчанию), портрет 1080x1920, квадрат 1080x1080 @ 24fps
- Определение оборудования — автоопределение ядер/ОЗУ, установка профиля качества. См.
references/optimization.md - Секции — сопоставление временных меток с функциями сцен, каждая со своей конфигурацией эффекта/палитры/цвета/шейдера
- Формат вывода — MP4 (по умолчанию), GIF (640x360 @ 15fps), последовательность PNG
Шаг 3: Создание скрипта¶
Один Python-файл. Компоненты (со ссылками на справочники):
1. Определение оборудования + профиль качества — references/optimization.md
2. Загрузчик ввода — зависит от режима; references/inputs.md
3. Анализатор характеристик — аудио БПФ, яркость видео или синтетический
4. Сетка + рендерер — многоплотностные сетки с кешем битовых карт; references/architecture.md
5. Палитры символов — несколько на проект; references/architecture.md § Палитры
6. Цветовая система — HSV + дискретный RGB + генерация гармонии; references/architecture.md § Цвет
7. Функции сцен — каждая возвращает canvas (uint8 H,W,3); references/scenes.md
8. Тонмап — адаптивная нормализация яркости; references/composition.md
9. Конвейер шейдеров — ShaderChain + FeedbackBuffer; references/shaders.md
10. Таблица сцен + диспетчер — время → функция сцены + конфигурация; references/scenes.md
11. Параллельный кодировщик — рендеринг клипов N воркерами через каналы ffmpeg
12. Main — оркестрация всего конвейера
Шаг 4: Проверка качества¶
- Сначала тестовые кадры: рендер отдельных кадров на ключевых временных метках перед полным рендером
- Проверка яркости:
canvas.mean() > 8для всего ASCII-контента. Если темно, понизьте гамму - Визуальная целостность: все ли сцены ощущаются частью одного видео?
- Проверка творческого видения: соответствует ли вывод концепции из Шага 1? Если выглядит шаблонно, вернитесь назад
Критические замечания по реализации¶
Яркость — используйте tonemap(), а не линейные множители¶
Это проблема №1 с визуальной точки зрения. ASCII на чёрном фоне по своей природе тёмен. Никогда не используйте множителиcanvas * N — они обрезают светлые участки. Используйте адаптивный тонмап:
[code]
def tonemap(canvas, gamma=0.75):
f = canvas.astype(np.float32)
lo, hi = np.percentile(f[::4, ::4], [1, 99.5])
if hi - lo < 10: hi = lo + 10
f = np.clip((f - lo) / (hi - lo), 0, 1) ** gamma
return (f * 255).astype(np.uint8)
[/code]
Конвейер: scene_fn() → tonemap() → FeedbackBuffer → ShaderChain → ffmpeg
Гамма по сценам: по умолчанию 0.75, соляризация 0.55, постеризация 0.50, яркие сцены 0.85. Используйте режим screen (не overlay) для тёмных слоёв.
Высота ячейки шрифта¶
macOS Pillow: textbbox() возвращает неправильную высоту. Используйте font.getmetrics(): cell_height = ascent + descent. См. references/troubleshooting.md.
Взаимная блокировка канала ffmpeg¶
Никогда не используйте stderr=subprocess.PIPE с долго работающим ffmpeg — буфер заполняется на 64KB и происходит блокировка. Перенаправляйте в файл. См. references/troubleshooting.md.
Совместимость шрифтов¶
Не все символы Unicode отображаются во всех шрифтах. Проверяйте палитры при инициализации — рендерьте каждый символ, проверяйте на пустой вывод. См. references/troubleshooting.md.
Архитектура отдельных клипов¶
Для сегментированных видео (цитаты, сцены, главы) рендерьте каждый как отдельный клип для параллельного рендеринга и выборочного повторного рендеринга. См. references/scenes.md.
Целевые показатели производительности¶
| Компонент | Бюджет |
|---|---|
| Извлечение характеристик | 1-5ms |
| Функция эффекта | 2-15ms |
| Рендер символов | 80-150ms (узкое место) |
| Конвейер шейдеров | 5-25ms |
| Итого | ~100-200ms/кадр |
| ## Справочники | |
| Файл | Содержание |
| --- | --- |
references/architecture.md |
Система сеток, пресеты разрешений, выбор шрифтов, палитры символов (20+), цветовая система (HSV + OKLAB + дискретный RGB + генерация гармонии), вспомогательная функция _render_vf(), класс GridLayer |
references/composition.md |
Пиксельные режимы смешивания (20 режимов), blend_canvas(), многокомпонентная композиция, адаптивный tonemap(), FeedbackBuffer, PixelBlendStack, система маскирования/трафаретов |
references/effects.md |
Строительные блоки эффектов: генераторы полей значений, поля оттенков, шум/fBM/деформация области, вороного, реакция-диффузия, клеточные автоматы, SDF, странные аттракторы, системы частиц, преобразования координат, временная согласованность |
references/shaders.md |
ShaderChain, диспетчеризация _apply_shader_step(), каталог из 38 шейдеров, аудиореактивное масштабирование, переходы, пресеты тонирования, кодирование выходного формата, терминальный рендеринг |
references/scenes.md |
Протокол сцен, класс Renderer, таблица SCENES, render_clip(), нарезка по битам, параллельный рендеринг, паттерны проектирования (иерархия слоёв, направленные дуги, визуальные метафоры, техники композиции), полные примеры сцен для каждого уровня сложности, чеклист дизайна сцен |
references/inputs.md |
Анализ аудио (БПФ, диапазоны, биты), сэмплинг видео, конвертация изображений, текст/лирика, TTS-интеграция (ElevenLabs, назначение голосов, микширование аудио) |
references/optimization.md |
Определение оборудования, профили качества, векторизованные паттерны, параллельный рендеринг, управление памятью, бюджеты производительности |
references/troubleshooting.md |
Ловушки широковещания NumPy, подводные камни режимов смешивания, многопроцессорность/пиклинг, диагностика яркости, проблемы ffmpeg, проблемы шрифтов, частые ошибки |
| * * * | |
| ## Творческое расхождение (используйте только когда пользователь запрашивает экспериментальный/креативный/уникальный вывод) | |
| Если пользователь просит творческий, экспериментальный, удивительный или нестандартный вывод, выберите стратегию, которая лучше всего подходит, и продумайте её шаги ПЕРЕД генерацией кода. | |
| * Принудительные связи — когда пользователь хочет вдохновения из другой области («сделай это органичным», «индустриальная эстетика») | |
| * Концептуальное смешение — когда пользователь называет две вещи для объединения («океан встречает музыку», «космос + каллиграфия») | |
| * Косвенные стратегии — когда пользователь максимально открыт («удивь меня», «что-то, чего я никогда не видел») |
Принудительные связи¶
- Выберите область, не связанную с визуальной целью (погодные системы, микробиология, архитектура, гидродинамика, ткачество)
- Перечислите её ключевые визуальные/структурные элементы (эрозия → постепенное раскрытие; митоз → разделение/дублирование; ткачество → переплетающиеся паттерны)
- Сопоставьте эти элементы с ASCII-символами и анимационными паттернами
- Синтезируйте — как выглядят «эрозия» или «кристаллизация» в символьной сетке?
Концептуальное смешение¶
- Назовите два различных визуальных/концептуальных пространства (например, океанские волны + ноты)
- Сопоставьте соответствия (гребни = высокие ноты, впадины = паузы, пена = стаккато)
- Смешивайте избирательно — сохраняйте самые интересные соответствия, отбрасывайте надуманные
- Развивайте эмерджентные свойства, существующие только в смешении
Косвенные стратегии¶
- Выберите одно: «Почитай свою ошибку как скрытое намерение» / «Используй старую идею» / «Что бы сделал твой ближайший друг?» / «Подчеркни недостатки» / «Переверни вверх дном» / «Только часть, не целое» / «Обрати»
- Интерпретируйте директиву в контексте текущей задачи ASCII-анимации
-
Примените латеральное озарение к визуальному дизайну перед написанием кода
- Справочник: полный SKILL.md
- Когда использовать
- Что внутри
- Творческий стандарт
- Режимы
- Стек
- Архитектура конвейера
- Творческое направление
- Рабочий процесс
- Критические замечания по реализации
- Целевые показатели производительности
- Справочники
- Творческое расхождение (используйте только когда пользователь запрашивает экспериментальный/креативный/уникальный вывод)