Manim Video

Анимации Manim CE: математические и алгоритмические видео в стиле 3Blue1Brown.

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

ИсточникВстроенный (установлен по умолчанию)
Путьskills/creative/manim-video
Версия1.0.0
Платформыlinux, macos, windows

Справочник: полный SKILL.md

инфо

Ниже — полное определение навыка, которое Hermes Agent загружает при его активации. Именно это агент видит как инструкции, когда навык включён.

Конвейер производства Manim-видео

Когда использовать

Применяй, когда пользователь просит: анимированные объяснения, математические анимации, визуализацию концепций, пошаговый разбор алгоритмов, технические explainer-ролики, видео в стиле 3Blue1Brown или любую программную анимацию с геометрическим и математическим содержанием. Навык создаёт explainer-видео в духе 3B1B, визуализации алгоритмов, вывод уравнений, архитектурные диаграммы и data-истории с помощью Manim Community Edition.

Творческий стандарт

Это образовательное кино. Каждый кадр учит. Каждая анимация раскрывает структуру.

Прежде чем написать первую строчку кода — сформулируй нарративную дугу. Какое заблуждение исправляет это видео? Где будет момент «ага!»? Какая визуальная история ведёт зрителя от непонимания к ясности? Промпт пользователя — отправная точка; интерпретируй его с педагогическим замыслом.

Геометрия раньше алгебры. Сначала показывай форму — уравнение потом. Зрительная память кодирует быстрее символьной. Когда геометрический паттерн появляется до формулы, сама формула ощущается как заслуженный вывод.

Качество с первого рендера — не обсуждается. Результат должен быть визуально чётким и эстетически цельным без итераций. Загромождённая картинка, сбитый тайминг или ощущение «слайдов из нейросети» — брак.

Слои непрозрачности управляют вниманием. Не показывай всё на одной яркости. Главные элементы — 1.0, контекстные — 0.4, структурные (оси, сетки) — 0.15. Мозг обрабатывает визуальную значимость послойно.

Паузы для дыхания. После каждой анимации нужен self.wait(). Зрителю нужно время переварить то, что только что появилось. Нельзя мчаться от одной анимации к следующей. Двухсекундная пауза после ключевого раскрытия — не потеря, а необходимость.

Единый визуальный язык. Все сцены делят одну цветовую палитру, единый размер шрифтов, согласованные скорости анимации. Технически правильное видео, где каждая сцена выполнена в случайных цветах — эстетический провал.

Требования

Запусти scripts/setup.sh, чтобы проверить зависимости. Нужны: Python 3.10+, Manim Community Edition v0.20+ (pip install manim), LaTeX (texlive-full на Linux, mactex на macOS) и ffmpeg. Справочная документация проверена на Manim CE v0.20.1.

Режимы

РежимВходные данныеРезультатСправочник
Объяснение концепцииТема/концепцияАнимированное объяснение с геометрической интуициейreferences/scene-planning.md
Вывод уравненияМатематические выраженияПошаговое анимированное доказательствоreferences/equations.md
Визуализация алгоритмаОписание алгоритмаПошаговое выполнение со структурами данныхreferences/graphs-and-data.md
Data storyДанные/метрикиАнимированные графики, сравнения, счётчикиreferences/graphs-and-data.md
Архитектурная диаграммаОписание системыКомпоненты, выстраивающиеся со связямиreferences/mobjects.md
Разбор статьиИсследовательская статьяАнимированные ключевые находки и методыreferences/scene-planning.md
3D-визуализация3D-концепцияВращающиеся поверхности, параметрические кривые, пространственная геометрияreferences/camera-and-3d.md

Стек

Один Python-скрипт на проект. Без браузера, без Node.js, без GPU.

СлойИнструментНазначение
ЯдроManim Community EditionРендеринг сцен, движок анимации
МатематикаLaTeX (texlive/MiKTeX)Рендеринг уравнений через MathTex
Видео I/OffmpegСклейка сцен, конвертация форматов, подмешивание аудио
TTSElevenLabs / Qwen3-TTS (опционально)Закадровый голос

Конвейер

PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
  1. PLAN — пиши plan.md: нарративная дуга, список сцен, визуальные элементы, цветовая палитра, текст закадрового голоса
  2. CODE — пиши script.py с одним классом на сцену; каждая сцена рендерится независимо
  3. RENDERmanim -ql script.py Scene1 Scene2 ... для черновика, -qh для финала
  4. STITCH — склейка клипов в final.mp4 через ffmpeg concat
  5. AUDIO (опционально) — добавь закадровый голос и/или фоновую музыку через ffmpeg; см. references/rendering.md
  6. REVIEW — рендери превью-кадры, сверяй с планом, правь

Структура проекта

project-name/
  plan.md                # Нарративная дуга, разбивка по сценам
  script.py              # Все сцены в одном файле
  concat.txt             # Список сцен для ffmpeg
  final.mp4              # Смонтированный результат
  media/                 # Генерируется Manim автоматически
    videos/script/480p15/

Творческое управление

Цветовые палитры

ПалитраФонОсновнойВторичныйАкцентПрименение
Classic 3B1B#1C1C1C#58C4DD (BLUE)#83C167 (GREEN)#FFFF00 (YELLOW)Общая математика/CS
Warm academic#2D2B55#FF6B6B#FFD93D#6BCB77Доступный стиль
Neon tech#0A0A0A#00F5FF#FF00FF#39FF14Системы, архитектура
Monochrome#1A1A2E#EAEAEA#888888#FFFFFFМинимализм

Скорость анимации

Контекстrun_timeself.wait() после
Появление заголовка/интро1.5s1.0s
Раскрытие ключевого уравнения2.0s2.0s
Transform/morph1.5s1.5s
Вспомогательная подпись0.8s0.5s
FadeOut для очистки0.5s0.3s
Раскрытие «момента ага»2.5s3.0s

Типографическая шкала

РольРазмер шрифтаПрименение
Title48Заголовки сцен, открывающий текст
Heading36Заголовки разделов внутри сцены
Body30Поясняющий текст
Label24Аннотации, подписи осей
Caption20Субтитры, мелкий текст

Шрифты

Для любого текста используй моноширинные шрифты. Pango-рендерер Manim даёт сломанный кернинг с пропорциональными шрифтами при любых размерах. Полные рекомендации — в references/visual-design.md.

MONO = "Menlo"  # задаём один раз в начале файла

Text("Fourier Series", font_size=48, font=MONO, weight=BOLD)  # заголовки
Text("n=1: sin(x)", font_size=20, font=MONO)                  # подписи
MathTex(r"\nabla L")                                            # математика (через LaTeX)

Минимальный font_size=18 для читаемости.

Вариативность сцен

Не используй одинаковый конфиг для всех сцен. Для каждой сцены:

  • Разный доминирующий цвет из палитры
  • Разная компоновка — не центрируй всё постоянно
  • Разный способ появления — чередуй Write, FadeIn, GrowFromCenter, Create
  • Разный визуальный вес — одни сцены насыщенные, другие разреженные

Рабочий процесс

Шаг 1: Планирование (plan.md)

Перед любым кодом пиши plan.md. Полный шаблон — в references/scene-planning.md.

Шаг 2: Код (script.py)

Один класс на сцену. Каждая сцена рендерится независимо.

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("Why does this work?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

Ключевые паттерны:

  • Субтитры на каждую анимацию: self.add_subcaption("text", duration=N) или subcaption="text" в self.play()
  • Общие цветовые константы в начале файла — для единообразия между сценами
  • self.camera.background_color задаётся в каждой сцене
  • Чистые выходы — FadeOut всех mobject в конце сцены: self.play(FadeOut(Group(*self.mobjects)))

Шаг 3: Рендер

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # черновик
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # финальное качество

Шаг 4: Склейка

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

Шаг 5: Проверка

manim -ql --format=png -s script.py Scene2_CoreConcept  # превью-кадр

Важные замечания по реализации

Сырые строки для LaTeX

# НЕПРАВИЛЬНО: MathTex("\frac{1}{2}")
# ПРАВИЛЬНО:
MathTex(r"\frac{1}{2}")

buff >= 0.5 для текста у края

label.to_edge(DOWN, buff=0.5)  # не меньше 0.5

FadeOut перед заменой текста

self.play(ReplacementTransform(note1, note2))  # не Write(note2) поверх

Не анимируй mobject, не добавленный на сцену

self.play(Create(circle))  # сначала добавить
self.play(circle.animate.set_color(RED))  # потом анимировать

Целевые показатели производительности

КачествоРазрешениеFPSСкорость
-ql (черновик)854x480155-15s/scene
-qm (среднее)1280x7203015-60s/scene
-qh (финальное)1920x10806030-120s/scene

Итерируй в -ql. -qh — только для финального рендера.

Справочные материалы

ФайлСодержимое
references/animations.mdБазовые анимации, функции скорости, композиция, синтаксис .animate, паттерны тайминга
references/mobjects.mdТекст, фигуры, VGroup/Group, позиционирование, стилизация, пользовательские mobject
references/visual-design.md12 принципов дизайна, слои непрозрачности, шаблоны компоновки, цветовые палитры
references/equations.mdLaTeX в Manim, TransformMatchingTex, паттерны вывода
references/graphs-and-data.mdОси, графики, BarChart, анимированные данные, визуализация алгоритмов
references/camera-and-3d.mdMovingCameraScene, ThreeDScene, 3D-поверхности, управление камерой
references/scene-planning.mdНарративные дуги, шаблоны компоновки, переходы сцен, шаблон планирования
references/rendering.mdСправочник CLI, пресеты качества, ffmpeg, работа с закадровым голосом, экспорт GIF
references/troubleshooting.mdОшибки LaTeX, ошибки анимации, типичные ошибки, отладка
references/animation-design-thinking.mdКогда анимировать, а когда показывать статику; декомпозиция, темп, синхронизация с голосом
references/updaters-and-trackers.mdValueTracker, add_updater, always_redraw, апдейтеры по времени, паттерны
references/paper-explainer.mdПревращение исследовательских статей в анимации — процесс, шаблоны, доменные паттерны
references/decorations.mdSurroundingRectangle, Brace, стрелки, DashedLine, Angle, жизненный цикл аннотаций
references/production-quality.mdЧеклисты до кода, до рендера, после рендера; пространственная компоновка, цвет, темп

Творческое отклонение (только когда пользователь просит экспериментальный/творческий/нестандартный результат)

Если пользователь хочет творческий, экспериментальный или нетрадиционный подход — выбери стратегию и обоснуй её ДО разработки анимации.

  • SCAMPER — когда нужен свежий взгляд на стандартное объяснение
  • Инверсия допущений — когда пользователь хочет поставить под сомнение привычный способ подачи темы

Трансформация по SCAMPER

Берёшь стандартную математическую/техническую визуализацию и преобразуешь её:

  • Substitute (замени): замени стандартную визуальную метафору (числовая ось → извилистая тропа, матрица → городская сетка)
  • Combine (объедини): совмести два подхода к объяснению (алгебраический + геометрический одновременно)
  • Reverse (разверни): выводи в обратном направлении — начни с результата и декомпозируй до аксиом
  • Modify (преувеличь): гиперболизируй параметр, чтобы показать, зачем он нужен (скорость обучения ×10, размер выборки ×1000)
  • Eliminate (убери): откажись от нотации — объясняй исключительно через анимацию и пространственные отношения

Инверсия допущений

  1. Перечисли, что «стандартно» в визуализации этой темы (слева направо, 2D, дискретные шаги, формальная нотация)
  2. Выбери самое фундаментальное допущение
  3. Переверни его (вывод справа налево, 3D-вложение 2D-концепции, непрерывная морфинг-анимация вместо шагов, ноль нотации)
  4. Исследуй, что инверсия открывает из того, что стандартный подход скрывает
ESC