ManimGL: Thư Viện Animation Toán Học Bằng Python
ManimGL là engine Python gốc của Grant Sanderson để viết animation toán học chính xác bằng code — chính là code render các video của 3Blue1Brown. README khuyên người mới dùng bản fork do cộng đồng duy trì để có điểm khởi đầu ổn định, kiểm thử kỹ và thân thiện hơn. Hãy chọn ManimGL nếu bạn muốn đúng công cụ đứng sau các video đó và không ngại tự xử lý lỗi setup; bỏ qua nếu muốn bản release đã kiểm thử — hãy dùng Manim Community Edition.
ManimGL Là Gì?
ManimGL là một thư viện Python để tạo animation chính xác, lập trình được, nhắm riêng tới các video toán học giải thích. Scene được viết dưới dạng class Python, render qua OpenGL, và xuất video bằng FFmpeg, với hỗ trợ LaTeX tùy chọn để dàn trang công thức. Package được cài dưới tên `manimgl` — không phải `manim` — và yêu cầu Python 3.10 trở lên.
Tính Năng Chính Cho Animation
- ✓Scene là các class Python: bạn subclass Scene và viết animation thao tác trên các đối tượng toán học thật, như minh hoạ trong OpeningManimExample của example_scenes.py.
- ✓Render bằng OpenGL: chạy manimgl example_scenes.py OpeningManimExample sẽ bật lên một cửa sổ phát trực tiếp scene đó, theo README.
- ✓FFmpeg đảm nhiệm xuất video, còn LaTeX (MiKTeX, MacTeX, hoặc một bản phân phối texlive) là dependency tùy chọn để dàn trang ký hiệu toán học.
- ✓custom_config.yml tập trung cấu hình thư mục output, nơi manim tìm asset ảnh và âm thanh, cùng các mặc định về style và chất lượng video.
- ✓Các flag CLI dành cho việc lặp lại nhanh: -w ghi ra file, -o ghi rồi mở file, -s nhảy tới frame cuối (-so lưu frame đó thành ảnh), -n <number> nhảy tới một animation cụ thể, và -f chạy playback ở chế độ fullscreen.
- ✓Repo 3b1b/videos chứa code sản xuất thật đứng sau các video của 3Blue1Brown, nên bạn có thể đọc scene thật thay vì chỉ ví dụ minh hoạ — dù README lưu ý code của video cũ có thể không chạy được trên bản manim hiện tại.
Cài Đặt ManimGL
Manim yêu cầu Python 3.10 trở lên, cộng với FFmpeg và OpenGL; LaTeX là system dependency tùy chọn, chỉ cần nếu bạn muốn dàn trang công thức. Cách đơn giản nhất là `pip install manimgl` rồi chạy `manimgl` để thử — lưu ý tên package là `manimgl`, không phải `manim` hay `manimlib`, và cài nhầm package là một cái bẫy mà chính README cảnh báo. Để hack vào bản thân thư viện, clone repo rồi chạy `pip install -e .`, sau đó `manimgl example_scenes.py OpeningManimExample` hoặc `manim-render example_scenes.py OpeningManimExample`. Trên Ubuntu/Debian bạn còn cần `libpango1.0-dev` cho Pango, và README khuyên dùng bộ nhẹ hơn `texlive-science texlive-fonts-extra texlive-latex-extra` thay vì `texlive-full` nặng hơn nhiều nếu bạn cần LaTeX. Windows cài FFmpeg riêng và dùng MiKTeX cho LaTeX; macOS dùng `brew install ffmpeg mactex` (hoặc cask BasicTeX nhẹ hơn nếu không muốn bundle MacTeX ~6GB), và người dùng Apple Silicon cần thêm Cairo qua `arch -arm64 brew install pkg-config cairo`. Đường cài qua Anaconda cũng được tài liệu hoá: tạo environment bằng `conda create -n manim python=3.10`, activate, rồi `pip install -e .`.
Tạo Animation Với ManimGL
Chạy `manimgl example_scenes.py OpeningManimExample` sẽ mở một cửa sổ và phát trực tiếp scene đó — đây là cách nhanh nhất để xác nhận setup của bạn hoạt động. Từ đó, file example_scenes.py và trang example-scenes trong docs cho thấy từ vựng animation và object của thư viện trong ngữ cảnh thực tế. Repo 3b1b/videos đi xa hơn, chứa code thực sự dùng để sản xuất video 3Blue1Brown, cùng ghi chú về một workflow tương tác hơn (có video demo kèm theo) để lặp lại trên một scene khi bạn đang xây nó. Trong công việc hàng ngày, các flag CLI quan trọng hơn vẻ ngoài của chúng: `-n <number>` nhảy thẳng tới một animation trong scene thay vì phát lại toàn bộ phần trước đó, còn `-s`/`-so` nhảy tới frame cuối để bạn kiểm tra bố cục mà không phải chờ render toàn bộ. `custom_config.yml` — chỉnh trực tiếp hoặc thả file cùng tên vào thư mục làm việc — là nơi bạn đặt output path và chất lượng video mặc định thay vì gõ lại flag mỗi lần.
Điểm mạnh
- ✓Đây là engine sản xuất thật đứng sau chính các video của 3Blue1Brown, không phải một bản spinoff đơn giản hoá, theo liên kết tới 3b1b/videos trong README.
- ✓Render bằng OpenGL cho bạn một cửa sổ preview trực tiếp thay vì chỉ ghi ra file, nên bạn có thể xem scene chạy với `manimgl example_scenes.py OpeningManimExample`.
- ✓Kiểm soát CLI chi tiết để lặp lại trên một scene mà không phải render lại toàn bộ: -n nhảy tới một animation cụ thể, -s/-so nhảy tới frame cuối.
- ✓custom_config.yml cho bạn một nơi duy nhất để đặt output path, vị trí asset, và style/chất lượng mặc định thay vì truyền flag mỗi lần chạy.
- ✓Giấy phép MIT, nên không có điều khoản ràng buộc nào chồng thêm lên bản thân code.
Lưu Ý Khi Dùng ManimGL
- △README nói rõ hướng dẫn cài đặt của nó chỉ dành cho ManimGL — dùng chúng cho Manim Community Edition, hoặc ngược lại, 'sẽ gây ra vấn đề', nên hai bản này không thể dùng thay thế cho nhau dù trùng tên.
- △Tài liệu được mô tả là vẫn đang 'in progress' tại 3b1b.github.io/manim, chưa phải một reference hoàn chỉnh.
- △Chính README mô tả Manim Community Edition là lựa chọn an toàn hơn cho người mới — được kiểm thử kỹ hơn, bảo trì tích cực hơn, và nhìn chung dễ tiếp cận hơn, với một pipeline CI và đóng góp mà repo gốc này không vận hành ở quy mô tương tự. Pull request vẫn được chấp nhận ở đây, chỉ là hạ tầng hỗ trợ mỏng hơn.
- △Code từ các video 3b1b/videos cũ có thể không chạy được trên bản manim hiện tại, theo README, nên các scene ví dụ bạn tìm thấy ở đó không chắc chạy đúng ngay.
- △Hỗ trợ LaTeX kéo theo setup khá nặng: MacTeX đầy đủ nặng khoảng 6GB, còn các lựa chọn nhẹ hơn như BasicTeX hay texlive-science nghĩa là bạn phải tự thêm package thủ công khi thiếu.
- △Cài nhầm package rất dễ xảy ra — `pip install manim` là một package khác với `manimgl` của repo này, và README cảnh báo trực tiếp về sự nhầm lẫn đó.
ManimGL So Với Manim Community Edition
Câu Hỏi Thường Gặp Về ManimGL
ManimGL là engine animation gốc của 3b1b, do Grant Sanderson xây cho chính các video 3Blue1Brown của mình. Manim Community Edition tách ra từ đó vào năm 2020 và, theo README của repo này, hướng tới ổn định hơn, kiểm thử kỹ hơn, và thân thiện hơn để bắt đầu — hai bản dùng tên package khác nhau và không thay thế cho nhau được.
ManimGL cần Python 3.10 trở lên, cộng với FFmpeg và OpenGL; LaTeX là dependency tùy chọn, chỉ cần khi bạn dàn trang công thức toán. Trên Linux, bạn còn cần Pango cùng development headers của nó.
Có — ManimGL được phát hành theo giấy phép MIT, giấy phép được liệt kê cho repo này trên GitHub, cho phép sử dụng, chỉnh sửa, và phân phối lại cho mục đích thương mại.
Có, hỗ trợ LaTeX được tích hợp sẵn nhưng là tùy chọn — bạn cài một bản phân phối như MiKTeX trên Windows hoặc MacTeX/BasicTeX trên macOS, và ManimGL dùng nó để dàn trang công thức trong scene.
Chạy lệnh như `manimgl example_scenes.py OpeningManimExample` để phát một scene trong cửa sổ. Thêm `-w` để ghi ra file, `-o` để ghi rồi mở file, `-s` hoặc `-so` để nhảy tới frame cuối, `-n <number>` để nhảy tới một animation cụ thể, hoặc `-f` để phát fullscreen.
Tài liệu đang 'in progress' tại 3b1b.github.io/manim, bao gồm một trang example scenes. Repo 3b1b/videos có code thật đứng sau các video của 3Blue1Brown, và có một trang docs tiếng Trung (docs.manim.org.cn) do cộng đồng manim-kindergarten duy trì riêng.
Vấn đề ManimGL giải quyết
Giải thích một phép chứng minh hay một phép biến đổi bằng hình ảnh thường nghĩa là tự tay đặt keyframe cho các hình khối trong một công cụ motion-graphics vốn không hiểu ma trận hay giới hạn là gì. ManimGL tồn tại vì Grant Sanderson cần điều khiển animation trực tiếp từ các đối tượng toán học bằng Python cho chính các video 3Blue1Brown của mình, nên một scene được viết dưới dạng code thao tác trên vector, hàm số, và các primitive hình học thay vì kéo thả trên timeline. Đó là một workflow cá nhân, không có tài liệu trong nhiều năm, trước khi các nhà phát triển khác fork nó thành một dự án được xây để người ngoài Grant Sanderson cũng dùng được.
Trường hợp sử dụng tốt nhất
- •Xây dựng chính loại animation toán học chính xác, lập trình được mà 3Blue1Brown sử dụng, vì đây là engine đứng sau các video đó.
- •Prototype timing và camera work của một scene ngay tại máy bằng cách dùng -s/-so để nhảy thẳng tới một frame thay vì render lại từ đầu.
- •Học từ vựng scene/animation của thư viện bằng cách đọc file example_scenes.py và trang example scenes trong docs.
- •Hack vào chính manimlib (clone repo rồi cài bằng pip install -e .) dành cho nhà phát triển muốn mở rộng hoặc chỉnh sửa phần lõi của engine thay vì chỉ gọi nó.
Ai nên dùng — và ai nên bỏ qua
Hãy thử ManimGL nếu bạn muốn đúng công cụ mà các video của 3Blue1Brown được xây dựng trên đó, bạn thoải mái tự xử lý các vấn đề setup FFmpeg/LaTeX/OpenGL, và bạn thích viết scene bằng Python hơn là click qua GUI. Bỏ qua — và cài Manim Community Edition thay thế — nếu bạn muốn bản release đã kiểm thử, CI hoạt động tích cực, và tài liệu đầy đủ hơn, vì chính README cũng hướng người mới tới đó.
