Перейти к содержанию

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, проблемы шрифтов, частые ошибки
* * *
## Творческое расхождение (используйте только когда пользователь запрашивает экспериментальный/креативный/уникальный вывод)
Если пользователь просит творческий, экспериментальный, удивительный или нестандартный вывод, выберите стратегию, которая лучше всего подходит, и продумайте её шаги ПЕРЕД генерацией кода.
* Принудительные связи — когда пользователь хочет вдохновения из другой области («сделай это органичным», «индустриальная эстетика»)
* Концептуальное смешение — когда пользователь называет две вещи для объединения («океан встречает музыку», «космос + каллиграфия»)
* Косвенные стратегии — когда пользователь максимально открыт («удивь меня», «что-то, чего я никогда не видел»)

Принудительные связи

  1. Выберите область, не связанную с визуальной целью (погодные системы, микробиология, архитектура, гидродинамика, ткачество)
  2. Перечислите её ключевые визуальные/структурные элементы (эрозия → постепенное раскрытие; митоз → разделение/дублирование; ткачество → переплетающиеся паттерны)
  3. Сопоставьте эти элементы с ASCII-символами и анимационными паттернами
  4. Синтезируйте — как выглядят «эрозия» или «кристаллизация» в символьной сетке?

Концептуальное смешение

  1. Назовите два различных визуальных/концептуальных пространства (например, океанские волны + ноты)
  2. Сопоставьте соответствия (гребни = высокие ноты, впадины = паузы, пена = стаккато)
  3. Смешивайте избирательно — сохраняйте самые интересные соответствия, отбрасывайте надуманные
  4. Развивайте эмерджентные свойства, существующие только в смешении

Косвенные стратегии

  1. Выберите одно: «Почитай свою ошибку как скрытое намерение» / «Используй старую идею» / «Что бы сделал твой ближайший друг?» / «Подчеркни недостатки» / «Переверни вверх дном» / «Только часть, не целое» / «Обрати»
  2. Интерпретируйте директиву в контексте текущей задачи ASCII-анимации
  3. Примените латеральное озарение к визуальному дизайну перед написанием кода

  4. Метаданные навыка

  5. Справочник: полный SKILL.md
  6. Когда использовать
  7. Что внутри
  8. Творческий стандарт
  9. Режимы
  10. Стек
  11. Архитектура конвейера
  12. Творческое направление
  13. Рабочий процесс
  14. Критические замечания по реализации
  15. Целевые показатели производительности
  16. Справочники
  17. Творческое расхождение (используйте только когда пользователь запрашивает экспериментальный/креативный/уникальный вывод)