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/O | ffmpeg | Склейка сцен, конвертация форматов, подмешивание аудио |
| TTS | ElevenLabs / Qwen3-TTS (опционально) | Закадровый голос |
Конвейер
PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
- PLAN — пиши
plan.md: нарративная дуга, список сцен, визуальные элементы, цветовая палитра, текст закадрового голоса - CODE — пиши
script.pyс одним классом на сцену; каждая сцена рендерится независимо - RENDER —
manim -ql script.py Scene1 Scene2 ...для черновика,-qhдля финала - STITCH — склейка клипов в
final.mp4через ffmpeg concat - AUDIO (опционально) — добавь закадровый голос и/или фоновую музыку через ffmpeg; см.
references/rendering.md - 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_time | self.wait() после |
|---|---|---|
| Появление заголовка/интро | 1.5s | 1.0s |
| Раскрытие ключевого уравнения | 2.0s | 2.0s |
| Transform/morph | 1.5s | 1.5s |
| Вспомогательная подпись | 0.8s | 0.5s |
| FadeOut для очистки | 0.5s | 0.3s |
| Раскрытие «момента ага» | 2.5s | 3.0s |
Типографическая шкала
| Роль | Размер шрифта | Применение |
|---|---|---|
| Title | 48 | Заголовки сцен, открывающий текст |
| Heading | 36 | Заголовки разделов внутри сцены |
| Body | 30 | Поясняющий текст |
| Label | 24 | Аннотации, подписи осей |
| Caption | 20 | Субтитры, мелкий текст |
Шрифты
Для любого текста используй моноширинные шрифты. 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 (черновик) | 854x480 | 15 | 5-15s/scene |
-qm (среднее) | 1280x720 | 30 | 15-60s/scene |
-qh (финальное) | 1920x1080 | 60 | 30-120s/scene |
Итерируй в -ql. -qh — только для финального рендера.
Справочные материалы
| Файл | Содержимое |
|---|---|
references/animations.md | Базовые анимации, функции скорости, композиция, синтаксис .animate, паттерны тайминга |
references/mobjects.md | Текст, фигуры, VGroup/Group, позиционирование, стилизация, пользовательские mobject |
references/visual-design.md | 12 принципов дизайна, слои непрозрачности, шаблоны компоновки, цветовые палитры |
references/equations.md | LaTeX в Manim, TransformMatchingTex, паттерны вывода |
references/graphs-and-data.md | Оси, графики, BarChart, анимированные данные, визуализация алгоритмов |
references/camera-and-3d.md | MovingCameraScene, 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.md | ValueTracker, add_updater, always_redraw, апдейтеры по времени, паттерны |
references/paper-explainer.md | Превращение исследовательских статей в анимации — процесс, шаблоны, доменные паттерны |
references/decorations.md | SurroundingRectangle, Brace, стрелки, DashedLine, Angle, жизненный цикл аннотаций |
references/production-quality.md | Чеклисты до кода, до рендера, после рендера; пространственная компоновка, цвет, темп |
Творческое отклонение (только когда пользователь просит экспериментальный/творческий/нестандартный результат)
Если пользователь хочет творческий, экспериментальный или нетрадиционный подход — выбери стратегию и обоснуй её ДО разработки анимации.
- SCAMPER — когда нужен свежий взгляд на стандартное объяснение
- Инверсия допущений — когда пользователь хочет поставить под сомнение привычный способ подачи темы
Трансформация по SCAMPER
Берёшь стандартную математическую/техническую визуализацию и преобразуешь её:
- Substitute (замени): замени стандартную визуальную метафору (числовая ось → извилистая тропа, матрица → городская сетка)
- Combine (объедини): совмести два подхода к объяснению (алгебраический + геометрический одновременно)
- Reverse (разверни): выводи в обратном направлении — начни с результата и декомпозируй до аксиом
- Modify (преувеличь): гиперболизируй параметр, чтобы показать, зачем он нужен (скорость обучения ×10, размер выборки ×1000)
- Eliminate (убери): откажись от нотации — объясняй исключительно через анимацию и пространственные отношения
Инверсия допущений
- Перечисли, что «стандартно» в визуализации этой темы (слева направо, 2D, дискретные шаги, формальная нотация)
- Выбери самое фундаментальное допущение
- Переверни его (вывод справа налево, 3D-вложение 2D-концепции, непрерывная морфинг-анимация вместо шагов, ноль нотации)
- Исследуй, что инверсия открывает из того, что стандартный подход скрывает