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 не требуется.

СлойИнструментНазначение
CorePython 3.10+, NumPyМатематика, операции с массивами, векторизованные эффекты
SignalSciPyFFT, поиск пиков (аудиорежимы)
ImagingPillow (PIL)Растеризация шрифтов, декодирование кадров, ввод/вывод изображений
Video I/Offmpeg (CLI)Декодирование входа, кодирование выхода, сведение звука
Parallelconcurrent.futuresN воркеров для пакетного/клипового рендера
TTSElevenLabs API (optional)Генерация нарративных клипов
OptionalOpenCVСэмплирование кадров видео, детекция краёв

Архитектура пайплайна

Каждый режим проходит один и тот же 6-этапный пайплайн:

INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADE → ENCODE
  1. INPUT — загрузка/декодирование исходного материала (кадры видео, сэмплы аудио, изображения или ничего)
  2. ANALYZE — извлечение покадровых признаков (аудиополосы, яркость/края видео, векторы движения)
  3. SCENE_FN — функция сцены рендерит в пиксельный холст (uint8 H,W,3). Складывает несколько символьных сеток через _render_vf() + режимы пиксельного смешения. См. references/composition.md
  4. TONEMAP — адаптивная нормализация яркости по перцентилям. См. references/composition.md § Adaptive Tonemap
  5. SHADE — постобработка через ShaderChain + FeedbackBuffer. См. references/shaders.md
  6. ENCODE — передача сырых RGB-кадров в ffmpeg для кодирования в H.264/GIF

Творческое руководство

Эстетические измерения

ИзмерениеВариантыРеференс
Character paletteРампы плотности, блочные элементы, символы, письменности (катакана, греческий, руны, брайль), специфичные для проектаarchitecture.md § Palettes
Color strategyHSV, 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
FeedbackZoom tunnel, радужные шлейфы, призрачное эхо, вращающаяся мандала, эволюция цветаcomposition.md § Feedback
MaskingКруг, кольцо, градиент, текстовый трафарет, анимированные iris/wipe/dissolvecomposition.md § Masking
TransitionsCrossfade, wipe, dissolve, glitch cut, iris, mask-based revealshaders.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-файл. Компоненты (со справочниками):

  1. Hardware detection + quality profile — references/optimization.md
  2. Input loader — зависит от режима; references/inputs.md
  3. Feature analyzer — аудио FFT, яркость видео или синтетические признаки
  4. Grid + renderer — сетки разной плотности с кешем битмапов; references/architecture.md
  5. Character palettes — несколько на проект; references/architecture.md § Palettes
  6. Color system — HSV + дискретный RGB + генерация гармонии; references/architecture.md § Color
  7. Scene functions — каждая возвращает canvas (uint8 H,W,3); references/scenes.md
  8. Tonemap — адаптивная нормализация яркости; references/composition.md
  9. Shader pipeline — ShaderChain + FeedbackBuffer; references/shaders.md
  10. Scene table + dispatcher — время → функция сцены + конфиг; references/scenes.md
  11. Parallel encoder — рендер клипов на N воркерах через пайпы ffmpeg
  12. 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 extraction1–5 мс
Effect function2–15 мс
Character render80–150 мс (узкое место)
Shader pipeline5–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.mdShaderChain, диспетчер _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

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

Conceptual Blending

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

Oblique Strategies

  1. Вытяни одну: «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»
  2. Истолкуй директиву применительно к текущей задаче ASCII-анимации
  3. Примени это боковое озарение к визуальному дизайну до написания кода
перевод и редактура:

обновлено

⌕ ESC