Ascii Video
ASCII-видео: конвертация видео/аудио в цветной ASCII MP4/GIF.
Метаданные навыка
| Источник | Встроенный (установлен по умолчанию) |
| Путь | skills/creative/ascii-video |
| Платформы | linux, macos, windows |
Справочник: полный SKILL.md
Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Агент видит эти инструкции, когда навык активен.
Конвейер производства ASCII-видео
Когда использовать
Используйте по запросам пользователей: ASCII-видео, текстовое арт-видео, видео в стиле терминала, анимация из символов, ретро-текстовая визуализация, аудиовизуализатор в ASCII, конвертация видео в ASCII-арт, эффекты в стиле «Матрицы» или любой анимированный ASCII-вывод.
Что внутри
Производственный конвейер для ASCII-арт-видео — любого формата. Преобразует видео/аудио/изображения/генеративный ввод в цветное ASCII-видео (MP4, GIF, последовательность изображений). Охватывает: конвертацию видео в ASCII, аудиореактивные музыкальные визуализаторы, генеративные ASCII-анимации, гибридное видео+аудио с реакцией, наложение текста/текстов песен, рендеринг в реальном времени в терминале.
Творческий стандарт
Это визуальное искусство. ASCII-символы — это среда; кино — это стандарт.
Прежде чем написать хотя бы одну строку кода, сформулируйте творческую концепцию. Какое настроение? Какую визуальную историю это рассказывает? Что делает ЭТОТ проект непохожим на любое другое ASCII-видео? Запрос пользователя — это отправная точка; интерпретируйте его с творческой амбициозностью, а не буквальным пересказом.
Превосходство с первого рендера — это обязательное условие. Результат должен быть визуально впечатляющим без необходимости в итерациях доработки. Если что-то выглядит шаблонно, плоско или как «ASCII-арт, сгенерированный ИИ», это неправильно — переосмыслите творческую концепцию, прежде чем сдавать работу.
Выходите за рамки базового словаря. Каталоги эффектов, пресеты шейдеров и библиотеки палитр в справочниках — это начальный словарный запас. Для каждого проекта комбинируйте, модифицируйте и изобретайте новые паттерны. Каталог — это палитра красок; вы пишете картину.
Будьте проактивно креативны. Расширяйте словарь навыка, когда этого требует проект. Если в справочниках нет того, что нужно для вашего замысла, создайте это. Включите как минимум один визуальный момент, о котором пользователь не просил, но который оценит — переход, эффект, цветовое решение, возвышающее всё произведение.
Целостная эстетика важнее технической правильности. Все сцены в видео должны ощущаться связанными единым визуальным языком — общая цветовая температура, родственные палитры символов, согласованный словарь движений. Технически правильное видео, где каждая сцена использует случайный эффект, — это эстетическая неудача.
Насыщенно, многослойно, продуманно. Каждый кадр должен вознаграждать за просмотр. Никогда не используйте плоский чёрный фон. Всегда многокомпонентная композиция. Всегда вариативность по сценам. Всегда осмысленный цвет.
Режимы
| Режим | Ввод | Вывод | Справочник |
|---|---|---|---|
| Видео в ASCII | Видеофайл | ASCII-воссоздание исходного материала | references/inputs.md § Выборка видео |
| Аудиореактивный | Аудиофайл | Генеративная визуализация на основе аудиохарактеристик | references/inputs.md § Анализ аудио |
| Генеративный | Нет (или параметры сида) | Процедурная ASCII-анимация | references/effects.md |
| Гибридный | Видео + аудио | ASCII-видео с аудиореактивными наложениями | Оба справочника по вводу |
| Текст/тексты песен | Аудио + текст/SRT | Текст с привязкой по времени и визуальными эффектами | references/inputs.md § Текст/Тексты песен |
| Озвучка TTS | Цитаты текста + TTS API | Озвученное видео-отзыв/цитата с печатным текстом | references/inputs.md § Интеграция TTS |
Стек
Один самодостаточный Python-скрипт на проект. GPU не требуется.
| Слой | Инструмент | Назначение |
|---|---|---|
| Ядро | Python 3.10+, NumPy | Математика, операции с массивами, векторизованные эффекты |
| Сигналы | SciPy | БПФ, обнаружение пиков (аудиорежимы) |
| Изображения | Pillow (PIL) | Растеризация шрифтов, декодирование кадров, ввод/вывод изображений |
| Видео ввод/вывод | ffmpeg (CLI) | Декодирование ввода, кодирование вывода, мультиплексирование аудио |
| Параллелизм | concurrent.futures | N воркеров для пакетного/клипового рендеринга |
| TTS | ElevenLabs API (опционально) | Генерация голосовых клипов |
| Опционально | OpenCV | Выборка кадров видео, обнаружение границ |
Архитектура конвейера
Каждый режим следует одному и тому же 6-этапному конвейеру:
ВВОД → АНАЛИЗ → СЦЕНА_ФН → ТОНОМАППИНГ → ЗАТЕНЕНИЕ → КОДИРОВАНИЕ
- ВВОД — Загрузка/декодирование исходного материала (кадры видео, аудиосэмплы, изображения или ничего)
- АНАЛИЗ — Извлечение покадровых характеристик (аудиодиапазоны, яркость/границы видео, векторы движения)
- СЦЕНА_ФН — Функция сцены рендерит на пиксельный холст (
uint8 H,W,3). Составляет несколько символьных сеток через_render_vf()+ режимы наложения пикселей. См.references/composition.md - ТОНОМАППИНГ — Адаптивная нормализация яркости на основе процентилей. См.
references/composition.md§ Адаптивный тономаппинг - ЗАТЕНЕНИЕ — Постобработка через
ShaderChain+FeedbackBuffer. См.references/shaders.md - КОДИРОВАНИЕ — Передача сырых 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: Творческое видение
Прежде чем писать код, сформулируйте творческую концепцию:
- Настроение/атмосфера: Что должен чувствовать зритель? Энергично, медитативно, хаотично, элегантно, зловеще?
- Визуальная история: Что происходит на протяжении видео? Нарастание напряжения? Трансформация? Растворение?
- Цветовой мир: Тёплый/холодный? Монохромный? Неоновый? Землистые тона? Какой доминирующий оттенок?
- Символьная текстура: Плотные данные? Редкие звёзды? Органические точки? Геометрические блоки?
- Что делает ЭТО особенным: Что делает этот проект уникальным?
- Эмоциональная дуга: Как развиваются сцены? Начало с энергией, нарастание к кульминации, разрешение?
Сопоставьте запрос пользователя с эстетическими выборами. «Чилл-лоуфай визуализатор» требует совершенно другого подхода, чем «глитч-киберпанк поток данных».
Шаг 2: Технический дизайн
- Режим — какой из 6 режимов выше
- Разрешение — альбомное 1920x1080 (по умолчанию), портретное 1080x1920, квадратное 1080x1080 @ 24fps
- Определение оборудования — автоопределение ядер/ОЗУ, установка профиля качества. См.
references/optimization.md - Секции — сопоставление временных меток с функциями сцен, каждая со своей конфигурацией эффекта/палитры/цвета/шейдера
- Формат вывода — MP4 (по умолчанию), GIF (640x360 @ 15fps), последовательность PNG
Шаг 3: Создание скрипта
Один Python-файл. Компоненты (со справочниками):
- Определение оборудования + профиль качества —
references/optimization.md - Загрузчик ввода — зависит от режима;
references/inputs.md - Анализатор характеристик — аудио БПФ, яркость видео или синтетический
- Сетка + рендерер — многоплотностные сетки с кэшем растров;
references/architecture.md - Палитры символов — несколько на проект;
references/architecture.md§ Палитры - Цветовая система — HSV + дискретный RGB + генерация гармонии;
references/architecture.md§ Цвет - Функции сцен — каждая возвращает
canvas (uint8 H,W,3);references/scenes.md - Тонмаппинг — адаптивная нормализация яркости;
references/composition.md - Конвейер шейдеров —
ShaderChain+FeedbackBuffer;references/shaders.md - Таблица сцен + диспетчер — время → функция сцены + конфигурация;
references/scenes.md - Параллельный кодировщик — рендеринг клипов N воркерами через каналы ffmpeg
- Главная — оркестровка полного конвейера
Шаг 4: Проверка качества
- Сначала тестовые кадры: отрендерите одиночные кадры в ключевые моменты времени до полного рендера
- Проверка яркости:
canvas.mean() > 8для всего ASCII-контента. Если темно, уменьшите гамму - Визуальная связность: все ли сцены ощущаются частью одного видео?
- Проверка творческого видения: соответствует ли результат концепции из Шага 1? Если выглядит шаблонно, вернитесь назад
Критические замечания по реализации
Яркость — используйте tonemap(), а не линейные множители
Это проблема №1 в визуальном плане. ASCII на чёрном фоне по своей природе тёмный. Никогда не используйте множители canvas * N — они обрезают светлые участки. Используйте адаптивный тономаппинг:
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)
Конвейер: 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 — буфер заполняется при 64 КБ и вызывает взаимную блокировку. Перенаправляйте в файл. См. references/troubleshooting.md.
Совместимость шрифтов
Не все символы Unicode отображаются во всех шрифтах. Проверяйте палитры при инициализации — рендерьте каждый символ, проверяйте на пустой вывод. См. references/troubleshooting.md.
Архитектура поклипового рендеринга
Для сегментированных видео (цитаты, сцены, главы) рендерьте каждый как отдельный клип для параллельного рендеринга и выборочного перерендера. См. references/scenes.md.
Целевые показатели производительности
| Компонент | Бюджет |
|---|---|
| Извлечение характеристик | 1-5 мс |
| Функция эффекта | 2-15 мс |
| Рендер символов | 80-150 мс (узкое место) |
| Конвейер шейдеров | 5-25 мс |
| Итого | ~100-200 мс/кадр |
Справочники
| Файл | Содержание |
|---|---|
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-анимации
- Примените латеральное озарение к визуальному дизайну перед написанием кода