Task coverage
Six separate V0.6 tasks cover coordinate systems, calculus motion, linear transforms, area proof, probability simulation, and Fourier decomposition.
ManimBench scores generated ManimCE submissions under fixed prompts and a shared sandbox. V0.6 ranks models by capability score while keeping pass rate, coverage, render success, and failure buckets separate.
Six separate V0.6 tasks cover coordinate systems, calculus motion, linear transforms, area proof, probability simulation, and Fourier decomposition.
One Python file per task at outputs/<task_id>.py, with from manim import * and a single MainScene class.
Official runs use Docker with network off, pinned ManimCE image, resource limits, 60 FPS output, and a 120 second cap per task.
AST parsing verifies required labels in executable code. Source-term hints are scored as advisory evidence; placeholders, keyword stuffing, and inactive scenes remain hard failures.
Sampled frames are checked for blank output, clutter, edge clipping, low contrast, and likely label overlap after render.
Reports record provider route, request IDs, generation time, tokens, cost when available, and run-level manifest data.
The default public suite is benchmarks/v0.6/suite.yaml. Every model gets the same master prompt plus task-specific requirements. Each task targets a different animation or math failure mode so one strong scene cannot hide weak ones.
coordinate_system_animation · axes, points, vectors, and coordinate labelsderivative_motion_story · moving point, tangent line, and rate-of-change labelsmatrix_transformation_grid · matrix action on grid and basis vectorsgeometric_area_proof · annotated decomposition and area equalityprobability_distribution_simulation · distribution evolution with readable parametersfourier_series_decomposition · partial sums, target wave, and coefficient explanationOlder suites remain in the repository for history. Public rankings on this site use V0.6.
OpenRouter is the default gateway for public API models with official OpenRouter slugs. Composer 2.5 is generated through Cursor Agent CLI because OpenRouter does not currently publish a Composer model slug.
Generation is checkpointed. Complete outputs/<model>/<task_id>.py files are skipped unless the operator passes --force. Every generation call is logged as JSONL with provider route, model ID, task ID, request ID, elapsed time, token counts, cost when available, and status.
Scores are built in layers. A failure at an early layer can cap or zero out the task before later checks run. The capability score is the primary ranking field, not the only evidence shown.
Required source terms are no longer fatal by themselves. A rendered animation can pass while missing an implementation hint, but the miss still lowers the capability score and appears in per-task evidence. Keyword stuffing remains a hard failure.
Severe visual failures can cap the automated score even when required strings appear in source. The leaderboard shows review status and adjusted visual scores when review files exist.
Only container sandbox runs with network disabled count as official for public comparison. The run manifest records suite metadata, prompt hash, task hashes, provider route, configured OpenRouter slugs, Manim version, Docker image digest, git commit, scoring version, and per-task runtime.
Local subprocess renders are supported for debugging. They are marked official: false and do not appear on the public leaderboard.
A task needs valid source, required labels, a successful render inside the time cap, generated media, and no severe visual sanity failure. It also needs a capability score of at least 70. Human review can still lower the published visual column if the animation is misleading or hard to follow.
Columns on the homepage table:
Use the metric tabs to re-rank by cost, wall-clock time, or tokens. Focus model highlights one row in the chart.