A community fork of 3Brown1Blue's [0] Manim [1] for creating the math animations and pictures used in their videos. From the manimcommunity's README:
"""
NOTE: This repository is maintained by the Manim Community and is not associated with Grant Sanderson or 3Blue1Brown in any way (although we are definitely indebted to him for providing his work to the world). If you would like to study how Grant makes his videos, head over to his repository (3b1b/manim). This fork is updated more frequently than his, and it's recommended to use this fork if you'd like to use Manim for your own projects.
"""
Someone please correct me if I am wrong (always, but am extra asking for it), is that the main 3b1b/manim is really just for Grant and folks in making his videos, and while he did open source it, he isn't interested in running a big OSS project.
To me this really shows the power of OSS, and that one can "take ownership" of their destiny through forking and that it doesn't need to be adversarial.
In many ways, ideas are much more powerful than code. That code itself can be a thought terminating thing, by making ideas reified, it also instantly constructs an Overton Window or maybe a Chesteron's Fence, or maybe a Winchester House. A Knot's Berry Farm of technical debt built on soggy metaphors.
Yes, I've heard him say in a few places in his videos that he gives his blessing to this fork and encourages its use over his own repo for that exact reason.
The cool thing about this is that it shows you can open source stuff and have people use it, but you don't have maintain the project.
At the same time, I hope it encourages folks to open source their code even if it isn't "ready for prime time" or what ever euphemism is for embarrassment.
While this seems to be good intentions, the message is unclear and confusing.
3b1b's explaination in his readme is much clearer and Manim community should decouple itself from the 3B1B name / popularity.
"Manim is an animation engine for explanatory math videos. It's used to create precise animations programmatically, as demonstrated in the videos of 3Blue1Brown." [1]
"Note, there are two versions of manim. This repository began as a personal project by the author of 3Blue1Brown for the purpose of animating those videos, with video-specific code available here. In 2020 a group of developers forked it into what is now the community edition, with a goal of being more stable, better tested, quicker to respond to community contributions, and all around friendlier to get started with. See this page for more details." [2]
[1] Manim Community Edition Readme
[2] Manim 3B1B edition
IIRC older projects of 3b1b don't necessarily build with later, evolving versions of 3b1b Manim. There might be some mix of versioning questions mixed in with branding questions.
Although the fact that the 3b1b team isn't using the community version makes me wonder why and whether the community version is actually better. In any case I'll take their word for it that it's more beginner friendly.
I believe 3b1b uses his extensive knowledge of the system he developed to sometimes do hacky things that wouldn't be easy to support long-term. His repo may be better for someone who has a similar extensive knowledge, but won't be ideal for someone who is mostly interested in it as a tool and doesn't want to learn its innards.
Community version core dev here, the reason is slightly complicated:
Back in 2019, there was no community edition, and most people based their own work off 3b1b's repository. Back then, Manim used a renderer called Cairo, which was painfully slow especially for 3D Scenes. So in late 2019, 3b1b started work on making Manim use OpenGL as its renderer instead, in a new branch called the "shaders" branch. In mid-2020, the community became frustrated at Grant's lack of interaction with them and slow response in merging PRs, so they decided to start their own fork. However, since the shaders branch was still extremely buggy and unfinished back then, they decided to build off the master branch instead.
In early 2021, the OpenGL transition on 3b1b/manim was "complete" (the shaders branch became the master branch, and 3b1b/manim uses OpenGL as its renderer now). This is probably the main reason 3b1b still uses his own version.
Since we decided to work on the master branch, we were (and still are) using Cairo as the default renderer. However, work quickly began after this to transition the community version to use OpenGL. We currently have an experimental OpenGL renderer, and it actually is nearly as complete as 3b1b/manim. However, since we had to worry about backwards compatibility, tests, documentation, Jupyter, etc., this transition takes a lot of work and is still ongoing. I expect that within 1 or 2 months however, that the community version will become "strictly better" than 3b1b's version, i.e. it can do everything the 3b1b version can with the OpenGL renderer (although it may still be considered experimental).
The reason we recommend using the community version is because it is significantly less buggy, has much more comprehensive documentation, tests, Jupyter support, new features added by contributors and devs, plus if you happen to run into a bug, you're far more likely to have a contributor notice it and make a PR fixing it quickly. Yes our renderer is slower, but we're quickly preparing to transition to OpenGL as a default.
This is an extension of an animation library used by math YouTuber 3blue1brown [0]. He has an excellent channel that I would recommend anything from. One of my favorite videos of his is where he shows the thought process behind solving a level 6 Putnam competition problem and makes it seem almost doable [1].
I've never been able to get into these animated videos of 3b1b, but the more recent videos with a more conversational tone (Lockdown math, the MIT Computational thinking course, the podcast) have made me a big fan of Grant.
I've noticed a bunch of Youtube channels have really upped their animation game and mastered how to structure/pace their videos. Especially the science oriented ones like Kurzgesagt [1] and Veritasium [2]. It's a really great movement, I'm happy to see it. 3blue1brown definitely played a role in this in the early days.
It reminds me of the way websites evolved around 2005-2010 to start to take design seriously, not just on specialist web design sites but on major news sites and search engines, etc. Part of it was "Web 2.0" and then Bootstrap style CSS frameworks and the maturity of browsers as IE6 died off.
Grant from 3b1b is actually explicitly encouraging people to try to make more mathematical education videos this summer [1] - and Freya Holmér cites that as being what encouraged her to expand from little gif explanations into a full-length exposition video for that piece on Bézier curves, so this is all connected!
And in the spirit of sharing a bit of the ‘how it’s done’ - obviously while Grant uses Manim, Freya uses Unity3D and her ‘Shapes’ library [2] to produce her visualizations - she also streams a lot of her dev work so if you want to follow along with how it’s done, that’s another avenue to look at.
I learned more from educational YouTube videos than I did during my (very expensive) lectures at university.
I expect with the quality of videos that are now being churned out, that the "education gain coefficient" between old style lectures and brilliantly produced video content would only have increased further. (Of course this only works in practice if you're engaged with the video, which is also true for lectures).
Shameless plug: I’m mentoring a student who is building a beginner-friendly version of manim on top of p5.js for his Google Summer of Code Project - check it out!
This is very nice. It looks well-designed for a moderately-technical teacher to create stuff with a lot of reasonable defaults and assumptions over configuration.
It seems slightly confusing, but I think the idea is that the brace is creating a new text object, which is returned and you can then add it to the scene. So it's not "get the current string" it's "give me a text object with this string." Could have been named `create_text()` perhaps.
Why does it follow this pattern, at least in the docs, where the user is supposed to subclass Scene and provide a construct method? How does inheritance help here? Wouldn't it be simpler if instead users can make Scene using their own abstractions and functions in whatever way they feel is appropriate?
I assume the Scene class is called into from some other part of the engine. So, your code needs to at least enter via those functions and return the right value / have the required side effects.
There are probably other methods defining the scene interface defined in the base class definition.
Shameless plug for my React library for creating similar-looking, interactive visualizations on the web. Highly inspired by 3blue1brown/manim's style. Less focused around animation, more focused on interaction. :)
Edit: probably needs a bit of chores done, especially around typescript declaration organization. I built it during a brief 3-week funemployment last year. Side projects are hard!
I’m pretty sure mathbox got abandoned when mathbox2 came out (understandably, it’s mostly one guy building it). But then mathbox2 appears to be abandoned now, and last time I tried to use it (a couple years ago) the coffeescript would no longer compile.
It was a really visionary piece of work, it’s a bummer to see it fall apart like this, and I don’t think anything has come out since that really replaces it (though manim does look cool).
I think there is a lot possible with a ThreeJS approach for DataViz. For instance there is a project [1] to have R implemented in A-Frame [2] (a simplified HTML like framework for ThreeJS). 3D in AR/VR is definitely a whole new visual language space for education such as the work by FlowImmersve's TicTok Data Guy [3].
Can anyone give a brief explanation of what it means to use SVG in this context?
I think of it as a file format, but I'm assuming no files are involved here. Aside from that I've noticed the contents of SVG files look similar to the 2d canvas operations—which to my mind seems like the natural thing to use for something like this—so why use SVG instead? And is there any relationship between canvas drawing and SVG?
I look at this (and most animated video) and think I ought to be able to use this in my boring grey corporate life - but maths at management levels rarely peeks above a std dev. I wonder how to raise the game?
In most businesses having reliable up to date raw data is the base level challenge. Analysis after this is like climbing a mountain and then just sticking a flag in it is all the effort anyone has left!
Does anyone have experience to compare this with MathBox? https://github.com/unconed/mathbox Mathbox is JavaScript, not Python, but presentation graphics are often web based, so I consider these two to be supplying solutions for similar needs.
I've used Mathbox quite a bit, it is flat out incredible, a jaw dropping artful simplicity to use. So I am wondering if this is worth even looking into...
This looks awesome. I've been looking for something like this, not for math but for animations showing the steps of an algorithm (thing something like a matrix transpose, showing each step by moving the cells as they are moved by the algorithm). Still it seems like a good match since math and this type of algorithm animation seem pretty close.
The main downside to be is the lack of SVG output: I'd have to embed videos whereas I prefer SVG if possible.
Well I've been on a real Geometric Algebra (aka Clifford Algebra) kick lately, and ran across ganja.js [1]. It's a single no deps file that is...impressive. 120k uncompressed, and with it you can construct any degree algebra (including the more esoteric hyperbolic/parabolic ones), render to canvas, svg or webgl(!). It also includes a clever little DSL parser and interpreter (it overloads the scientific notation to name basis vectors!) that lets you construct more complex things from simple things using various kinds of products.
The author, Steven De Keninck, is quite impressive as well, having got his start in the demoscene some time ago. He has a good video from SIGGRAPH 2019 [2] that explains why this algebra is better than [matrices, tensors, vectors, complex numbers]. Of particular interest (to me anyway) is the 2D projective geometry.
I don't want to oversell it, but ganja is fucking amazing and there is a great deal I want to do with it. For one, I'd like to recapitulate my physics degree with it.
I see that the 3D animations in 3Brown1Blue's videos have lower framerate than the ones in 2D. Does it take so long to render 3D so that you'll have to lower the FPS to speed up the process or is it just another tool?
One notion that I have had is that the rocks star wall street trader might often be someone who has just been lucky 4 or 5 times in a row. If you assume that had actual insight on one trade and got lucky the other times you can attribute their success to mostly luck pretty easily. If you have a large enough pool of traders, the talisman traders are probabilistically inevitable.
""" NOTE: This repository is maintained by the Manim Community and is not associated with Grant Sanderson or 3Blue1Brown in any way (although we are definitely indebted to him for providing his work to the world). If you would like to study how Grant makes his videos, head over to his repository (3b1b/manim). This fork is updated more frequently than his, and it's recommended to use this fork if you'd like to use Manim for your own projects. """
See the gallery for it in action [2].
[0] https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw
[1] https://github.com/3b1b/manim
[2] https://docs.manim.community/en/stable/examples.html