{"id":14525276,"url":"https://github.com/bmmtstb/manim-meshes","last_synced_at":"2026-04-08T15:31:16.005Z","repository":{"id":37209250,"uuid":"504475919","full_name":"bmmtstb/manim-meshes","owner":"bmmtstb","description":"2D and 3D basic mesh implementation for manim","archived":false,"fork":false,"pushed_at":"2023-10-24T09:43:06.000Z","size":5664,"stargazers_count":45,"open_issues_count":3,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-17T01:45:47.483Z","etag":null,"topics":["manim-animations","manim-engine","manim-python","mesh","python","trimesh"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bmmtstb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-17T09:40:08.000Z","updated_at":"2025-11-05T15:47:35.000Z","dependencies_parsed_at":"2024-12-28T23:31:47.789Z","dependency_job_id":"748a48e7-4efa-48d2-b804-15116bf076c4","html_url":"https://github.com/bmmtstb/manim-meshes","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/bmmtstb/manim-meshes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmtstb%2Fmanim-meshes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmtstb%2Fmanim-meshes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmtstb%2Fmanim-meshes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmtstb%2Fmanim-meshes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bmmtstb","download_url":"https://codeload.github.com/bmmtstb/manim-meshes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmtstb%2Fmanim-meshes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31562685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["manim-animations","manim-engine","manim-python","mesh","python","trimesh"],"created_at":"2024-09-04T14:01:22.472Z","updated_at":"2026-04-08T15:31:15.984Z","avatar_url":"https://github.com/bmmtstb.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"[![Python Test and Lint](https://github.com/bmmtstb/manim-meshes/actions/workflows/python_ci_test.yaml/badge.svg)](https://github.com/bmmtstb/manim-meshes/actions/workflows/python_ci_test.yaml) [![CodeQL](https://github.com/bmmtstb/manim-meshes/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/bmmtstb/manim-meshes/actions/workflows/codeql-analysis.yml)\n# Manim for Meshes\n\n\u003e ⚠️ not fully optimal - but fine for smaller meshes\n\u003e \n\u003e Manim and the OpenGL renderer are not really friends right now, therefore most of the code runs terribly slow for larger meshes. In Addition to the small educational meshes we present a faster mesh that uses a custom shader but this requires manipulating the manim library.\n\u003e\n\u003e Stay tuned or feel free to assist. Either here or directly in the manim OpenGL part. Not necessarily everything is a Bézier curve... \n\nManim-Trimeshes implements manim functionalities for different types of meshes using either basic node-face data structures or by importing meshes from the python [trimesh](https://pypi.org/project/trimesh/ \"trimesh on pypi\") library.\n\nIt is mainly developed as a Project for Interactive Graphics Systems Group (GRIS) at TU Darmstadt University, but is made publicly available for everyone interested in rendering and animating meshes.\n\n## Installation\n\nManim-meshes has been published to [pypi](https://pypi.org/project/manim-meshes/) and therefore can be easily installed using:\n\n``pip install manim-meshes``\n\n## Usage\n\n``from manim_meshes import *``\n\nWhile executing a commandline manim script, make sure to set the `--renderer=opengl` flag, the Cairo renderer will ins most cases not work.\n\nThe basic `ManimMesh` and `Manim2DMesh` from `manim_models/basic_mesh` can currently only be used for smaller meshes (\u003c1k Nodes), because it is dependent on the manim internal shaders which are not really implemented optimally. This type of mesh can be easily used for 2D and smaller 3D explanatory videos, not for high resolution rendering. Both these classes should give manim-functionalities like shift, rotate and scale. But due to the sheer amount of MObject functions we can not implement all of them, so make sure the renderer has overwritten the method you are trying to use if something does not look right.\n\nThe `TriangleManim2DMesh` from `triangle_mesh` implements further functions that are only reasonable for two-dimensional triangle meshes. (e.g. Delaunay) This was designed for educational purposes. There is also a package\n`delaunay` containing multiple useful functions regarding delaunay triangulations, e.g. Voronoi diagrams, checking the delaunay criterion or a divide \u0026 conquer algorithm.\n\nThe more advanced `FastManimMesh` from `opengl_mesh` uses a custom shader which needs to be inserted into the base manim implementation at this time! But therefore it can render enormous meshes fast. Sadly rendering is kind of everything this renderer is capable of at the moment.\n\nAll these Mesh-Renders reference a mesh based on the `Mesh`-Class, in `data_models`, which should implement a multitude of basic Mesh-functions.\n\n## Example\n\n![Static image of a cone, to show the rendering capabilities](docs/images/ConeScene_v0.16.0.post0.png)\n\nWith active poetry venv Run one of the minimal test examples: `manim --renderer=opengl tests/test_scene.py ConeScene`.\n\nMultiple other examples can be found in the `tests/test_scene.py` file.\n\n[![see the PyramidScene for basic manim mesh uses](docs/images/PyramidScene.png)](https://user-images.githubusercontent.com/1500595/193240449-5978f46f-68b0-4d08-bf37-4ff1fea54f28.mp4)\n\nThe general procedure is like in manim, create a class with a construct method. Then create and add the instance of the renderable mesh you like to use. This mesh will receive the real node-face mesh and manipulate it. \nYou can shift (translate) and scale the whole mesh or single vertices. Additionally most of the manim functions are available as coloring single objects. Somehow Rotate does not work, because it only updates the copy of the rotation and therefore our own mesh class does not get updated.\n\n### Parameters\nAs parameters got a little overwhelming, there are a few default parameters for the meshes in `params.py`. You just need to pass kwargs that you want to change while creating the mesh.\n\n## Development\nIn PyCharm set `./src/`-folder as project sources root and `./tests/`-folder as tests sources root if necessary.\n\nInstall poetry according to your likings.\n\nActivate the poetry venv: `cd ./manim_meshes/`, then `poetry shell`\n\nInstall: `poetry install`\nIf you get errors, it is possible that you have to pip install `pycairo` and or `manimpango` manually (globally?), depending on your setup. Make sure to run `poetry install` until there are no more errors!\n\nAfter updating packages make sure to update poetry and your git .lock file: `poetry update`\n\nIf you implemented some features, update version using the matching poetry command: `poetry version prerelease|patch|minor|major`\nSee the Poetry [Documentation](https://python-poetry.org/docs/cli/#version).\nIf the CI works properly, Publishing to pypi on master branch is automatically, it can be done manually with the correct privileges: `poetry publish --build`. Don't hesitate to contact any of the developers or open issues.\n\n### Debugging\nLike with basic manim, create an executable Python file with something around:\n\n```python\nfrom tests.test_scene import SnapToGridScene\nif __name__ == \"__main__\":\n    scene = SnapToGridScene()\n    scene.render()\n```\n\nThen debug the file and place breakpoints as expected. May not work with the \"renderer=opengl\" flag that is necessary for some scripts. Please update this example if you found out how to do it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmmtstb%2Fmanim-meshes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbmmtstb%2Fmanim-meshes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmmtstb%2Fmanim-meshes/lists"}