Skip to content

ManimCat 是一个基于 AI 的数学动画生成平台,用户只需输入自然语言描述,系统便会通过 OpenAI 格式的api请求调用AI自动生成 Manim 代码并渲染出精美的数学可视化视频,支持 LaTeX 公式、模板化生成以及代码错误自动修复,让复杂概念的动态展示变得触手可及。

License

Notifications You must be signed in to change notification settings

Wing900/ManimCat

Repository files navigation

title emoji colorFrom colorTo sdk sdk_version app_file pinned
ManimCat
🐱
gray
blue
docker
3.10
start-with-redis-hf.cjs
false

ManimCat Logo
paws

ManimCat

∫   ∑   ∂   ∞

🎬 AI-Powered Mathematical Animation Generator

让数学动画创作变得简单优雅 · 基于 Manim 与大语言模型

◆   ◆   ◆

ManimCE React Node.js License

前言样例技术部署贡献思路现状



前言

很荣幸在这里介绍我的新项目ManimCat,它是一只猫

本项目基于manim-video-generator架构级重构与二次开发而来,在此感谢原作者 Rohit Ghumare。我重写了整个前后端架构,解决了原版在并发和渲染稳定性上的痛点,并加以个人审美设计与应用的理想化改进。

ManimCat 是一个基于 AI 的数学可视化生成平台,支持 videoimage 两种输出模式,面向课堂教学与题目讲解场景。

用户只需输入自然语言描述,系统便会通过 AI 自动生成 Manim 代码,并按模式渲染为动画视频或多张静态图片。系统支持 LaTeX 公式、双阶段生成、错误修复重试,以及图片模式下的锚点分块渲染,适合做“逐步推导 + 数形结合”的教学内容。

界面

image-20260221125910244

image-20260221130027231

image-20260221130809525

样例

01

用双栏布局,解释正弦函数的拉伸变换和解析式的关系

manim-animation-1769495952621.mp4

example01

02

画一个单位圆并且生成正弦函数

manim-animation-1770384425933.mp4

example02

技术

技术栈

后端

  • Express.js 4.18.0 + TypeScript 5.9.3
  • Bull 4.16.5 + ioredis 5.9.2(Redis 任务队列)
  • OpenAI SDK 4.50.0
  • Zod 3.23.0(数据验证)

前端

  • React 19.2.0 + TypeScript 5.9.3
  • Vite 7.2.4
  • TailwindCSS 3.4.19
  • react-syntax-highlighter 16.1.0

系统依赖

  • Python 3.11
  • Manim Community Edition 0.19.2
  • LaTeX(texlive)
  • ffmpeg + Xvfb

部署

  • Docker + Docker Compose
  • Redis 7

技术路线

用户请求 → POST /api/generate (outputMode: video | image)
           ↓
       [认证中间件]
           ↓
       [Bull 任务队列]
           ↓
    ┌─────────────────────────────────────────────┐
    │                生成处理器                    │
    ├─────────────────────────────────────────────┤
    │ 1. 概念分析                                  │
    │    - 统一走 AI(关闭模板快捷路径)            │
    │ 2. 两阶段生成                                │
    │    - 阶段1: 概念设计师                        │
    │    - 阶段2: 代码生成者                        │
    │ 3. 代码重试管理器(最多 4 次)                │
    │ 4. 按输出模式渲染                             │
    │    - video: 渲染 mp4                          │
    │    - image: 解析 YON_IMAGE 锚点并逐张渲染 PNG │
    │ 5. 存储结果与阶段耗时(Redis + 文件系统)      │
    └─────────────────────────────────────────────┘
           ↓
      前端轮询状态
           ↓
    GET /api/jobs/:jobId (video_url | image_urls)

重试机制说明:

  • 概念设计师结果会保存,不需要重复设计
  • 每次重试都发送完整的对话历史(原始提示词 + 历史代码 + 错误信息)
  • 最多重试 4 次,失败后任务标记为失败

图片模式说明:

  • 输出必须为 YON_IMAGE_n 锚点代码块,后端按锚点组数判定图片数量并逐张渲染。
  • 任意一张渲染失败则整任务失败(严格模式)。
  • 返回结果字段为 image_urls,视频模式返回 video_url

环境变量配置

环境变量 默认值 说明
PORT 3000 服务端口
REDIS_HOST localhost Redis 地址
REDIS_PORT 6379 Redis 端口
REDIS_PASSWORD - Redis 密码(如需)
REDIS_DB 0 Redis 数据库
OPENAI_API_KEY - OpenAI API Key(必填)
OPENAI_MODEL glm-4-flash OpenAI 模型
OPENAI_TIMEOUT 600000 OpenAI 请求超时(毫秒)
CUSTOM_API_URL - 自定义 OpenAI 兼容 API
MANIMCAT_API_KEY - API 访问密钥(可选)
AI_TEMPERATURE 0.7 生成温度
AI_MAX_TOKENS 1200 生成最大 tokens
DESIGNER_TEMPERATURE 0.8 设计师温度
DESIGNER_MAX_TOKENS 12000 设计师最大 tokens
REQUEST_TIMEOUT 600000 请求超时(毫秒)
JOB_TIMEOUT 600000 任务超时(毫秒)
MANIM_TIMEOUT 600000 Manim 渲染超时(毫秒)
CODE_RETRY_MAX_RETRIES 4 代码修复重试次数
MEDIA_RETENTION_HOURS 72 图片/视频文件保留小时数
MEDIA_CLEANUP_INTERVAL_MINUTES 60 媒体清理任务执行间隔(分钟)

示例 .env 文件:

PORT=3000
REDIS_HOST=localhost
REDIS_PORT=6379
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=glm-4-flash
OPENAI_TIMEOUT=600000
AI_TEMPERATURE=0.7
CODE_RETRY_MAX_RETRIES=4

部署

请查看部署文档

贡献

我对原作品进行了比较大量的修改和重构,使其更符合我的设计想法:

  1. 框架架构重构
  • 后端使用 Express.js + Bull 任务队列架构
  1. 前后端分离
  • 前后端分离,React + TypeScript + Vite 独立前端
  1. 存储方案升级
  • Redis 存储任务状态与结果(TTL 管理),不再使用概念缓存捷径
  1. 任务队列系统
  • Bull + Redis 任务队列,支持重试、超时、指数退避
  1. 前端技术栈
  • React 19 + TailwindCSS + react-syntax-highlighter
  1. 项目结构
  • src/{config,middlewares,routes,services,queues,prompts,types,utils}/ frontend/src/{components,hooks,lib,types}/
  1. 新增功能
  • CORS 配置中间件

  • 新增图片输出模式(与视频模式并列)

  • 图片模式支持 YON_IMAGE 锚点分块、多图逐张渲染与画廊预览

  • 支持图片打包下载(全部下载)

  • 增加图片输入支持(参考图)

  • 简洁中国风的轻盈前端主题,支持双色切换、设置模态框等组件

  • 增加对第三方oai格式的请求支持,支持第三方自定义api

  • 增加重试机制,增加前后端状态查询

  • 增加前端自定义视频参数(仅视频模式生效)

  • 支持内存监控端点

  • 自定义提示词管理,新增专门的提示词管理页面,支持配置8种不同类型的提示词

  • 支持二次人工修改和渲染,支持二次AI修改

  • 增加计时功能,可查看各阶段耗时(图片/视频通用)

  • 增加后端test接口

提示词功能说明

提示词类型

系统支持 8 种提示词类型,分为两个主要类别:

系统级提示词(System)

  • conceptDesigner:概念设计系统提示词 - 用于指导 AI 理解数学概念并设计动画场景
  • codeGeneration:代码生成系统提示词 - 用于指导 AI 生成符合规范的 Manim 代码
  • codeRetry:系统重试提示词 - 仅用于代码渲染失败后的修复阶段,系统本身不会 重试,只是进入修复流程时使用该系统提示词

用户级提示词(User)

  • conceptDesigner:概念设计用户提示词 - 补充说明概念设计的具体需求和风格
  • codeGeneration:代码生成用户提示词 - 补充说明代码生成的具体要求和规范
  • codeRetryInitial:代码修复初始重试提示词 - 代码第一次失败时的修复指导
  • codeRetryFix:代码修复提示词 - 代码第二次失败时的详细修复指导

使用流程

  1. 访问页面:点击主界面右上角的“提示词管理”按钮(文档图标)
  2. 选择类型:在侧边栏选择要编辑的提示词类型
  3. 编辑提示词:在主编辑区输入或修改提示词内容
  4. 保存配置:点击保存按钮或自动保存
  5. 应用效果:配置会自动应用到下一次生成任务

与主页面概念输入的关系

  • 主页面输入:每次生成动画时需要重新输入的具体任务描述
  • 提示词管理:一次配置,多次使用的全局行为规则
  • 结合使用:系统会将用户输入的概念与配置的提示词结合使用,生成符合要求的动画

提示词生效逻辑

  • 默认优先级:用户未修改时,使用后端默认提示词模板
  • 覆盖优先级:用户修改后,仅覆盖对应字段,其余继续使用默认值
  • 重试阶段:初次生成失败后进入修复流程,系统提示词使用 codeRetry,用户提示词使用 codeRetryInitial/codeRetryFix

开源与版权声明

1. 软件协议

本项目后端架构及前端部分实现参考/使用了 manim-video-generator 的核心思想。

  • 继承部分代码遵循 MIT License
  • 本项目新增的重构代码、任务队列逻辑及前端组件,同样以 MIT License 向开源社区开放。

2. 核心资产版权声明

以下内容为本人(ManimCat 作者)原创,严禁任何形式的商用行为:

  • 提示词工程:本项目中 src/prompts/ 目录下所有高度优化的 Manim 代码生成提示词及逻辑,均为本人原创。
  • API Index Data:本人自行爬取、清洗并制作的 Manim v0.18.2 API 索引表及相关强约束规则。
  • 特定算法逻辑:针对思考模型的正则清理算法及 fallback 容错机制。

未经本人书面许可,任何人不得将上述“核心资产”用于:

  1. 直接打包作为付费产品销售。
  2. 集成在付费订阅制的商业 AI 服务中。
  3. 在未注明出处的情况下进行二次分发并获利。

事实上,作者已经关注到市面上存在一些闭源商业项目,正利用类似的 AI + Manim 思路向数学教育工作者收取高额费用进行盈利。然而,开源社区目前仍缺乏针对教育场景深度优化的成熟项目。

ManimCat 的诞生正是为了对标并挑战这些闭源商业软件。 我希望通过开源的方式,让每一位老师都能廉价地享受到 AI 带来的教学可视化便利————你只需要支付api的费用,幸运的是,对于优秀的中国LLM大模型来说,这些花费很廉价。为了保护这一愿景不被商业机构剽窃并反向收割用户,我坚决禁止任何对本项目核心提示词及索引数据的商业授权。

维护说明

由于作者精力有限(个人业余兴趣开发者,非专业背景),目前完全无法对外部代码进行有效的审查和长期维护。因此,本项目欢迎 PR,不过代码审查周期长。感谢理解。

如果你有好的建议或发现了 Bug,欢迎提交 Issue 进行讨论,我会根据自己的节奏进行改进。如果你希望在本项目基础上进行大规模修改,欢迎 Fork 出属于你自己的版本。

如果你觉得有启发与帮助,那是我的荣幸。

如果你觉得这个作品很好,也欢迎请作者喝可乐🥤

点击下方链接进行投喂:

爱发电赞助

感谢你的支持,我会更有动力维护这个项目!

## 致谢
  • 原项目作者
  • Linux.do社区
  • 阿里云百炼平台

About

ManimCat 是一个基于 AI 的数学动画生成平台,用户只需输入自然语言描述,系统便会通过 OpenAI 格式的api请求调用AI自动生成 Manim 代码并渲染出精美的数学可视化视频,支持 LaTeX 公式、模板化生成以及代码错误自动修复,让复杂概念的动态展示变得触手可及。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •