Ascii Video
ASCII-видео: конвертация видео/аудио в цветной ASCII MP4/GIF.
Метаданные навыка
| Источник | Встроенный (установлен по умолчанию) |
| Путь | skills/creative/ascii-video |
| Версия | 1.0.0 |
| Автор | SHL0MS, Hermes Agent |
| Лицензия | MIT |
| Платформы | linux, macos, windows |
| Теги | ASCII, Video, FFmpeg, Terminal-Art |
Справочник: полный SKILL.md
Ниже — полное определение навыка, которое Hermes Agent загружает при его активации. Именно этот текст агент получает в качестве инструкций, когда навык активен.
ASCII Video Production Pipeline
Когда использовать
Применяй, когда пользователь просит: ASCII-видео, видео из текстового арта, терминальное видео, анимацию символьным артом, ретро-визуализацию текстом, аудиовизуализатор в ASCII, конвертацию видео в ASCII-арт, эффекты в стиле матрицы или любой анимированный ASCII-вывод.
Что внутри
Полный пайплайн производства ASCII-арт-видео под любой формат. Превращает видео, аудио, изображения и генеративный ввод в цветной символьный вывод (MP4, GIF, последовательность кадров). Охватывает: конвертацию видео в ASCII, аудиореактивные музыкальные визуализаторы, генеративные ASCII-анимации, гибридный режим видео+аудио, наложение текста/текстов песен, рендеринг в терминале в реальном времени.
Творческий стандарт
Это визуальное искусство. ASCII-символы — материал; кино — планка качества.
Прежде чем написать единую строку кода, сформулируй творческую концепцию. Какое настроение? Какую визуальную историю рассказывает этот проект? Чем ОН отличается от всех остальных ASCII-видео? Промпт пользователя — отправная точка; интерпретируй его с творческой амбицией, а не буквально.
Безупречность с первого рендера — обязательна. Результат должен впечатлять без итеративных правок. Выглядит шаблонно, плоско или как «ASCII-арт от нейросети» — это брак; переосмысли концепцию до выпуска.
Выходи за пределы справочного словаря. Каталоги эффектов, пресеты шейдеров и библиотеки палитр — лишь стартовый словарь. В каждом проекте комбинируй, видоизменяй, изобретай новые паттерны. Каталог — набор красок; картину пишешь ты.
Проявляй инициативу. Расширяй словарь навыка, когда того требует проект. Нет нужного в справочниках — строй сам. Добавь хотя бы один визуальный момент, о котором пользователь не просил, но который оценит: переход, эффект, цветовое решение, поднимающее вещь целиком.
Цельная эстетика важнее технической правильности. Все сцены должны быть связаны единым визуальным языком — общая цветовая температура, согласованные символьные палитры, единый словарь движения. Технически грамотное видео, где у каждой сцены случайный непохожий эффект, — эстетический провал.
Плотно, слоисто, осмысленно. Каждый кадр должен вознаграждать взгляд. Никаких плоских чёрных фонов. Всегда многосеточная композиция. Всегда вариация по сценам. Всегда намеренный цвет.
Режимы
| Режим | Вход | Выход | Референс |
|---|---|---|---|
| Video-to-ASCII | Видеофайл | ASCII-воссоздание исходных кадров | references/inputs.md § Video Sampling |
| Audio-reactive | Аудиофайл | Генеративная визуализация, управляемая аудиопризнаками | references/inputs.md § Audio Analysis |
| Generative | Нет (или seed-параметры) | Процедурная ASCII-анимация | references/effects.md |
| Hybrid | Видео + аудио | ASCII-видео с аудиореактивными оверлеями | Оба референса по вводу |
| Lyrics/text | Аудио + текст/SRT | Синхронизированный текст с визуальными эффектами | references/inputs.md § Text/Lyrics |
| TTS narration | Текстовые цитаты + TTS API | Нарративное видео с цитатами/отзывами и набираемым текстом | references/inputs.md § TTS Integration |
Стек
Один самодостаточный Python-скрипт на проект. GPU не требуется.
| Слой | Инструмент | Назначение |
|---|---|---|
| Core | Python 3.10+, NumPy | Математика, операции с массивами, векторизованные эффекты |
| Signal | SciPy | FFT, поиск пиков (аудиорежимы) |
| Imaging | Pillow (PIL) | Растеризация шрифтов, декодирование кадров, ввод/вывод изображений |
| Video I/O | ffmpeg (CLI) | Декодирование входа, кодирование выхода, сведение звука |
| Parallel | concurrent.futures | N воркеров для пакетного/клипового рендера |
| TTS | ElevenLabs API (optional) | Генерация нарративных клипов |
| Optional | OpenCV | Сэмплирование кадров видео, детекция краёв |
Архитектура пайплайна
Каждый режим проходит один и тот же 6-этапный пайплайн:
INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADE → ENCODE
- INPUT — загрузка/декодирование исходного материала (кадры видео, сэмплы аудио, изображения или ничего)
- ANALYZE — извлечение покадровых признаков (аудиополосы, яркость/края видео, векторы движения)
- SCENE_FN — функция сцены рендерит в пиксельный холст (
uint8 H,W,3). Складывает несколько символьных сеток через_render_vf()+ режимы пиксельного смешения. См.references/composition.md - TONEMAP — адаптивная нормализация яркости по перцентилям. См.
references/composition.md§ Adaptive Tonemap - SHADE — постобработка через
ShaderChain+FeedbackBuffer. См.references/shaders.md - ENCODE — передача сырых RGB-кадров в ffmpeg для кодирования в H.264/GIF
Творческое руководство
Эстетические измерения
| Измерение | Варианты | Референс |
|---|---|---|
| Character palette | Рампы плотности, блочные элементы, символы, письменности (катакана, греческий, руны, брайль), специфичные для проекта | architecture.md § Palettes |
| Color strategy | HSV, OKLAB/OKLCH, дискретные RGB-палитры, автогенерация гармонии, монохром, температура | architecture.md § Color System |
| Background texture | Синус-поля, fBM-шум, domain warp, вороной, реакция-диффузия, клеточные автоматы, видео | effects.md |
| Primary effects | Кольца, спирали, тоннель, вихрь, волны, интерференция, аврора, огонь, SDF, странные аттракторы | effects.md |
| Particles | Искры, снег, дождь, пузыри, руны, орбиты, стайные боиды, следование за flow-field, шлейфы | effects.md § Particles |
| Shader mood | Ретро CRT, чистый модерн, glitch art, кинематографичный, мечтательный, индустриальный, психоделический | shaders.md |
| Grid density | от xs(8px) до xxl(40px), смешанная по слоям | architecture.md § Grid System |
| Coordinate space | Декартово, полярное, тайловое, повёрнутое, fisheye, лента Мёбиуса, с искажением области | effects.md § Transforms |
| Feedback | Zoom tunnel, радужные шлейфы, призрачное эхо, вращающаяся мандала, эволюция цвета | composition.md § Feedback |
| Masking | Круг, кольцо, градиент, текстовый трафарет, анимированные iris/wipe/dissolve | composition.md § Masking |
| Transitions | Crossfade, wipe, dissolve, glitch cut, iris, mask-based reveal | shaders.md § Transitions |
Вариация по секциям
Не используй один конфиг на всё видео. Для каждой секции/сцены:
- Другой эффект фона (или скомпонуй 2–3)
- Другая символьная палитра (под настроение)
- Другая цветовая стратегия (или хотя бы другой оттенок)
- Меняй интенсивность шейдера (больше bloom на пиках, больше зерна в тишине)
- Другие типы частиц, если частицы задействованы
Изобретение под проект
В каждом проекте изобрети хотя бы одно из:
- Кастомная символьная палитра под тему
- Кастомный эффект фона (скомбинируй/видоизмени готовые блоки)
- Кастомная цветовая палитра (дискретный RGB-набор под бренд/настроение)
- Кастомный набор символов для частиц
- Оригинальный переход или визуальный момент
Не просто выбирай из каталога. Каталог — словарь; стихотворение пишешь ты.
Рабочий процесс
Шаг 1: творческое видение
До любого кода сформулируй творческую концепцию:
- Mood/atmosphere: что должен почувствовать зритель? Энергично, медитативно, хаотично, элегантно, тревожно?
- Visual story: что происходит на протяжении ролика? Нарастает напряжение? Преображение? Растворение?
- Color world: тёплый/холодный? Монохром? Неон? Земляные тона? Доминирующий оттенок?
- Character texture: плотный поток данных? Редкие звёзды? Органические точки? Геометрические блоки?
- What makes THIS different: одна вещь, выделяющая проект среди остальных.
- Emotional arc: как развиваются сцены? Открытие с энергией, нарастание к кульминации, разрешение?
Сопоставь промпт пользователя с эстетическими решениями. «Расслабленный lo-fi визуализатор» — это совсем другая задача, чем «glitch-киберпанк-поток данных».
Шаг 2: техническое проектирование
- Mode — какой из 6 режимов выше
- Resolution — альбомное 1920x1080 (по умолчанию), портретное 1080x1920, квадратное 1080x1080 @ 24fps
- Hardware detection — автоопределение ядер/RAM, выбор профиля качества. См.
references/optimization.md - Sections — сопоставь таймстампы с функциями сцен, у каждой свой конфиг эффектов/палитры/цвета/шейдеров
- Output format — MP4 (по умолчанию), GIF (640x360 @ 15fps), PNG-последовательность
Шаг 3: написание скрипта
Один Python-файл. Компоненты (со справочниками):
- Hardware detection + quality profile —
references/optimization.md - Input loader — зависит от режима;
references/inputs.md - Feature analyzer — аудио FFT, яркость видео или синтетические признаки
- Grid + renderer — сетки разной плотности с кешем битмапов;
references/architecture.md - Character palettes — несколько на проект;
references/architecture.md§ Palettes - Color system — HSV + дискретный RGB + генерация гармонии;
references/architecture.md§ Color - Scene functions — каждая возвращает
canvas (uint8 H,W,3);references/scenes.md - Tonemap — адаптивная нормализация яркости;
references/composition.md - Shader pipeline —
ShaderChain+FeedbackBuffer;references/shaders.md - Scene table + dispatcher — время → функция сцены + конфиг;
references/scenes.md - Parallel encoder — рендер клипов на N воркерах через пайпы ffmpeg
- Main — оркестрация всего пайплайна
Шаг 4: проверка качества
- Сначала тестовые кадры: рендери отдельные кадры на ключевых таймстампах до полного рендера
- Проверка яркости:
canvas.mean() > 8для всего ASCII-контента. Тёмно — снижай гамму - Визуальная связность: все ли сцены ощущаются частями одного видео?
- Проверка творческой концепции: результат совпадает с концепцией из шага 1? Выглядит шаблонно — возвращайся
Критические замечания по реализации
Яркость — используй tonemap(), а не линейные множители
Это визуальная проблема номер один. ASCII на чёрном изначально тёмный. Никогда не используй множители canvas * N — они срезают светлые участки. Применяй адаптивный tonemap:
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, solarize 0.55, posterize 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.
Целевая производительность
| Компонент | Бюджет |
|---|---|
| Feature extraction | 1–5 мс |
| Effect function | 2–15 мс |
| Character render | 80–150 мс (узкое место) |
| Shader pipeline | 5–25 мс |
| Total | ~100–200 мс/кадр |
Справочники
| Файл | Содержимое |
|---|---|
references/architecture.md | Система сеток, пресеты разрешений, выбор шрифта, символьные палитры (20+), цветовая система (HSV + OKLAB + дискретный RGB + генерация гармонии), хелпер _render_vf(), класс GridLayer |
references/composition.md | Режимы пиксельного смешения (20 режимов), blend_canvas(), многосеточная композиция, адаптивный tonemap(), FeedbackBuffer, PixelBlendStack, система масок/трафаретов |
references/effects.md | Строительные блоки эффектов: генераторы полей значений, поля оттенков, noise/fBM/domain warp, вороной, реакция-диффузия, клеточные автоматы, SDF, странные аттракторы, системы частиц, координатные преобразования, временна́я когерентность |
references/shaders.md | ShaderChain, диспетчер _apply_shader_step(), каталог из 38 шейдеров, аудиореактивное масштабирование, переходы, пресеты тонирования, кодирование форматов вывода, рендеринг в терминале |
references/scenes.md | Протокол сцены, класс Renderer, таблица SCENES, render_clip(), нарезка в такт битам, параллельный рендер, паттерны дизайна (иерархия слоёв, направленные дуги, визуальные метафоры, приёмы композиции), полные примеры сцен всех уровней сложности, чек-лист дизайна сцены |
references/inputs.md | Анализ аудио (FFT, полосы, биты), сэмплирование видео, конвертация изображений, текст/тексты песен, интеграция TTS (ElevenLabs, назначение голосов, сведение звука) |
references/optimization.md | Детекция оборудования, профили качества, векторизованные паттерны, параллельный рендер, управление памятью, бюджеты производительности |
references/troubleshooting.md | Ловушки broadcasting в NumPy, подводные камни режимов наложения, мультипроцессинг/пиклинг, диагностика яркости, проблемы ffmpeg, проблемы со шрифтами, частые ошибки |
Творческое отклонение (использовать только когда пользователь запрашивает экспериментальный/творческий/уникальный вывод)
Если пользователь просит творческий, экспериментальный, неожиданный или нестандартный результат — выбери подходящую стратегию и продумай её шаги ДО генерации кода.
- Forced Connections — когда пользователь хочет вдохновения из другой области («make it look organic», «industrial aesthetic»)
- Conceptual Blending — когда пользователь называет две вещи для объединения («ocean meets music», «space + calligraphy»)
- Oblique Strategies — когда пользователь максимально открыт («surprise me», «something I’ve never seen»)
Forced Connections
- Выбери область, не связанную с визуальной задачей (метеосистемы, микробиология, архитектура, гидродинамика, ткачество)
- Перечисли её основные визуальные/структурные элементы (эрозия → постепенное раскрытие; митоз → расщепление-удвоение; ткачество → переплетающиеся узоры)
- Спроецируй эти элементы на ASCII-символы и паттерны анимации
- Синтезируй — как «эрозия» или «кристаллизация» выглядит в символьной сетке?
Conceptual Blending
- Назови два разных визуальных/концептуальных пространства (например, океанские волны + нотный стан)
- Найди соответствия (гребни = высокие ноты, впадины = паузы, пена = стаккато)
- Смешивай избирательно — оставь самые интересные соответствия, отбрось натянутые
- Развивай эмерджентные свойства, существующие только в этом смешении
Oblique Strategies
- Вытяни одну: «Honor thy error as a hidden intention» / «Use an old idea» / «What would your closest friend do?» / «Emphasize the flaws» / «Turn it upside down» / «Only a part, not the whole» / «Reverse»
- Истолкуй директиву применительно к текущей задаче ASCII-анимации
- Примени это боковое озарение к визуальному дизайну до написания кода