THANK YOU!!! I LOVE YOU!!!! I can finally start making beautiful mathematics problems, and transformations, using animations! I have waited a lot of time to be able to show others how I imagine problems :)
Hi Benjamin, Recently, I installed MANIM and watching your tutorial. I don't have any coding background but still, the way you have explained in the video, trust me, I have grasped every bit of it and I really want to thank you for providing such great content. Lots of LOVE from India.
I'm loving this series. Funny story: I'm when I get distracted and you say "Vee-Group" in the background, it lands as "Lie group" on my Canadian englaphone ear, and my attention snaps back over to the video.
I’ve been using Manim for about a year, even purchased some learning material for it. But I’m learning quite a few new things from this series! Thank you and I hope you keep up this great work and this becomes part of the Manim documentation. You’re a great instructor.
@@CodeMathsPhysicsthere is a small learning curve at the start but then it indeed gets very easy and you can do anything, provided you are pretty solid in python. i think you can make animations really quickly compared to almost any other method, especially if you consider how pretty they look. i teach continuum mechanics at a big uni and i occasionally make animations for my class with manim and the reactions are always pretty strong!
It is very nice that you provide video tutorials for Manim. It's better to have an explanation than just a documentation or reference. I miss the information on how to retrieve the default value of a Mobject property, particularly from text of which you showed setting the default value in the video. Since the `set_default` method is writing a `partialmethod` into the constructor, I tried to access arguments from `Text.__init__` but without success.
Thanks for the kind words! The easiest way to see the default values is probably by checking the docs or the implementation. Or do you mean retrieving it after it has been changed? In that case I'm not sure; the inspect module has a useful "signature" function, IIRC.
@@behackl Yeah. It's difficult to find specific things in the docs. In my opinion documentation is mostly just a reference and always incomplete but with VSCode I can more quickly look it up. The implementation of `set_default` apparently uses `partialmethod` to apply arguments to the constructor. It does not scale well but is functional for a limited number of calls to `set_default`. My simple solution is, to create a variable in the class. I pass the variable into `Text.set_default()` and just reuse that variable when I want to know the default value. I only need to ensure that the variable is updated whenever a new default is set. Not nice but functional.
This series of videos is excellent, thank you @Benjamin for providing seemingly the best teaching available about Manim. I do have a really strong aversion to background music for anything, especially coding - it fries my brain (maybe due to my being a musician, I cannot but have my attention drawn to the music) - but thankfully here the volume is very low! A request for future productions though - could you possibly manage without this distracting irrelevancy? (Background music seems to be more and more common, but I have no idea what the purpose of it is...)
Uh. Thanks. It's exactly what I was looking for. Manim documentation is pretty bad at this. Ofc I started by drawing scene explaining perspective projection on paper with 5mm grid, then tried to make at least basic SVG and then transfer it into manim. But my drawing was 2 to 40 units wide (with zoom) and 1 to 20 units tall. Here comes the fun: make NumberPlane/Axes with 40x20 grid covering roughly given rectangle at screen, draw all lines, squares and polygons inside it in grid coordinates. As one of the steps, zoom it 20 times and scale objects 20 times as well (at one or in sequence). At best don't scale texts and line widths ad dynamically adjust label spacing.
Really helpful as I always wanted to make learning of mathematics with python language interesting... This library is actually doing what I was looking for you... Thanks for your effort Benjamin... :-)
Is it possible to align separate text objects so that they sit on the same line? Rather than having the bottom of "help" (the bottom point of the p) aligned with the bottom of "me" (the bottom of either letter). So "help" ends up slightly above "me".
Thank you for another great episode! In terms of feedback, I was going to say that throughout the video I was hoping to see how we can animate object and group positions and arrangements, but since you mentioned at the end that this will follow in the next episode I'll just look forward to that one. :) Keep up the great work!
Great video! I changed some parameters like the background color, the default color of the MathTex objects, etc. Is there a way to change some parameter of some animation? For example, I use the Indicate animation lots of time, the default color for Indicate animation is YELLOW. Is there a way to change the default color for all the callbacks of the Indicate class, or the run_time parameter for example. Thank you.
Unfortunately the Animation class currently doesn't support the same `set_default`-mechanism that Mobjects do -- maybe at some point in the future! You can build something similar yourself though, take a look how we are doing it for Mobject: github.com/ManimCommunity/manim/blob/7c9f98c090d62a54e4c435b583e65e41974bda91/manim/mobject/mobject.py#L181
Is it true? shift work with manim units where are next_to work differently . Why in next to 1*UP+1*RIGHT has different meaning that 1*UP+1*RIGHT in next to . As you have mentioned 1*UP+1*RIGHT in next_to example it transform dot2 to 1,1 in plane but at different position!?
In the shift method, you specify the exact vector a mobject is shifted for. In next_to, you only specify the direction in which, relative to the given anchor, your mobject should be moved. The "buff" parameter controls the distance in next_to. Does that help?
I am using VS Code -- my friend Naveen has a pretty detailed guide on how to set things up correctly, see here: www.naveenmk.me/manim/manim-configuration-for-vscode/
I'm pretty sure that you're the only person who has explained the Munites in his video. I really appreciate the good work. By the way, it was really hard for me to follow the video because of the music. I could use subtitles instead, but they cover the video, so I didn't use them.
@@djfn4s3r45 I'll think about it, but it's not a straightforward compromise; I also got feedback that others found that the music made the videos more engaging for them.
Nice video and very useful. 1. Is there any chance that you could increase your text size in future videos? It's a little small for old folk like me. 2. I've been playing around with manim (only for the last 3 days though - I'm a noob) and have been animating objects via the set_x() and set_y() methods. I don't really understand how the x/y units accessible via those setters relate to the Munit/pixel positions that you have discussed here. Could you explain, please? Danke im voraus!
Thanks for the feedback! 1. I'll try to remember making the font size a bit larger when recording the next episode, sure. Bear with me, I'm new to producing this sort of content, might take a while until I get things figured out. :-) 2. The values you are passing to set_x and set_y are exactly the Munit measurements of the scene: mobj.set_x(0).set_y(0) will move your mobject's center to the center of the scene; mobj.set_y(4) will move it exactly to the top of the scene and so on. You could also move your mobejcts using mobj.move_to([x, y, 0]), that should have the same effect as using set_x and set_y. Maybe go to the interactive notebook I've linked in the video description and just try how your approach of using set_x & set_y compares to the other positioning methods discussed in the video. That might help - but feel free to keep asking if not!
@@behackl Thanks for the response. Four more points/questions: 1. I've found that it's much easier to understand how the coord. system is layed out if I temporarily add a NumberPlane to the Scene. 2. If I add a NumberPlane and an Axes to the Scene, then I can see that the Axes units and NumberPlane units differ, but I can't see how to fix this, or why it should be. This seems to be unnecessarily confusing - shouldn't the two sets of units coincide? 3. Where is the best place to report bugs in the community version? There seem to be at least some bugs related to Axes display in a NumberPlane, and with tip size control (seems not to work at all, AFAICS) 4. It would be very helpful if, in a later video, you could discuss the animation model in some detail. At the moment, I'm not finding it easy to construct a mental picture of how it works, or what the canonical approach to animation is.
@@scollyer.tuition 1: sure, makes sense; whatever helps. 2: No, this is more or less intended: with Axes, you are supposed to specify the x_range and y_range, and these might just not be in a 16:9 ratio so that stretching the axes lengths to make them fit the scene dimensions is not a good default behavior. There are x_length and y_length keyword arguments though with which you can control the axes lengths yourself. 3: Please report bugs to github.com/manimCommunity/manim/issues 4. My plan is to make the next episode about animations, it might just take a few more days until I find the time to produce it.
@@behackl Thanks for the rapid and detailed response. I'm rather confused about the Axes units, given your explanation. My main interest in manim at the moment is animation of 2D graphs, and more specifically, dots moving on graphs (to illustrate tangent vectors to curves, etc) I was intending to do this via the set_x()/set_y() methods driven off a ValueTracker, but the (x,y) coords produced by doing that will be incorrect if I display an Axes. I guess I'm misunderstanding how to generate (x,y) coords that are compatible with an Axes instance - mine will be compatible only with a NumberPlane. Anyway, I shall investigate this further on my own. And completely off-topic: I've looked at some of your German videos and I was wondering if you have an Austrian or Bavarian accent, when you speak German.
@@scollyer.tuition happy to have helped! :-) If you create an Axes mobject ax, then you can use ax.coords_to_point(x, y) to get the scene coordinates corresponding to your coordinates in your axes. That is, if you want to add a dot at (1,2) in your axes, you could do so with self.add(Dot().move_to(ax.coords_to_point(1, 1))). I'll probably have an example around that in Episode 4, but that might, unfortunately, take while. :-/ My accent is Austrian; I've been living in Carinthia (southern Austria) for most of my life.
The next_to method places the mobject in the specified direction (note: just direction) given a certain buffer distance which can be controlled with the "buff" keyword.
@@wojciechmocek4586 The default value of buff is 0.25; next_to moves the appropriate contact point of the mobject to the appropriate point of the target an then adds a buffer of 0.25 times the specified direction.
Yes, you just need to use a font that supports the glyph of the language; see this example in our documentation: docs.manim.community/en/stable/reference/manim.mobject.text.text_mobject.Text.html#multiplefonts
If I could do it easily I'd do it -- enabling subtitles requires me to transcribe the entire video. I unfortunately don't have enough time to get this done fast(er), sorry.
This is the tutorial Manim needs, thanks so much for doing this !
Dr. Hackl, this was invaluable! Grateful for all the thoughtful examples.
These tutorials are very helpful for learning Manim! thank you!
THANK YOU!!! I LOVE YOU!!!!
I can finally start making beautiful mathematics problems, and transformations, using animations! I have waited a lot of time to be able to show others how I imagine problems :)
Excellent 👌 Tutorial Sir. Precise - Clear & To the point !!! Hands down the best tutorial video for Manim !!! Thank You very much Sir.
Hi Benjamin,
Recently, I installed MANIM and watching your tutorial. I don't have any coding background but still, the way you have explained in the video, trust me, I have grasped every bit of it and I really want to thank you for providing such great content. Lots of LOVE from India.
I'm loving this series. Funny story: I'm when I get distracted and you say "Vee-Group" in the background, it lands as "Lie group" on my Canadian englaphone ear, and my attention snaps back over to the video.
I’ve been using Manim for about a year, even purchased some learning material for it. But I’m learning quite a few new things from this series! Thank you and I hope you keep up this great work and this becomes part of the Manim documentation. You’re a great instructor.
Thank you very much for the kind words, glad you found this helpful!
Please, keep going! This is a welcome contribution. Manim is not easy to learn as is, and the lack of documemtation and tutorials does not help.
It is damn easy but very labourious, to create a small animation video of 2-3 minutes it takes nearly 200 lines of code atleast.
@@CodeMathsPhysicsthere is a small learning curve at the start but then it indeed gets very easy and you can do anything, provided you are pretty solid in python. i think you can make animations really quickly compared to almost any other method, especially if you consider how pretty they look. i teach continuum mechanics at a big uni and i occasionally make animations for my class with manim and the reactions are always pretty strong!
Your guides are the best! I actually started yesterday and now I can make basic animations with your help!
Nice, relaxing way to spend time, very useful, thank you
Best Manim's tutorial! Thanks!!
Thank you very much for making the Jupyter notebook available!
Thanks Ben! This is so awesome!
It is very nice that you provide video tutorials for Manim. It's better to have an explanation than just a documentation or reference.
I miss the information on how to retrieve the default value of a Mobject property, particularly from text of which you showed setting the default value in the video.
Since the `set_default` method is writing a `partialmethod` into the constructor, I tried to access arguments from `Text.__init__` but without success.
Thanks for the kind words! The easiest way to see the default values is probably by checking the docs or the implementation. Or do you mean retrieving it after it has been changed? In that case I'm not sure; the inspect module has a useful "signature" function, IIRC.
@@behackl Yeah. It's difficult to find specific things in the docs. In my opinion documentation is mostly just a reference and always incomplete but with VSCode I can more quickly look it up. The implementation of `set_default` apparently uses `partialmethod` to apply arguments to the constructor. It does not scale well but is functional for a limited number of calls to `set_default`.
My simple solution is, to create a variable in the class. I pass the variable into `Text.set_default()` and just reuse that variable when I want to know the default value. I only need to ensure that the variable is updated whenever a new default is set. Not nice but functional.
This series of videos is excellent, thank you @Benjamin for providing seemingly the best teaching available about Manim.
I do have a really strong aversion to background music for anything, especially coding - it fries my brain (maybe due to my being a musician, I cannot but have my attention drawn to the music) - but thankfully here the volume is very low! A request for future productions though - could you possibly manage without this distracting irrelevancy? (Background music seems to be more and more common, but I have no idea what the purpose of it is...)
Thanks for the feedback, I'll think a bit about it. :-)
Uh. Thanks. It's exactly what I was looking for. Manim documentation is pretty bad at this. Ofc I started by drawing scene explaining perspective projection on paper with 5mm grid, then tried to make at least basic SVG and then transfer it into manim. But my drawing was 2 to 40 units wide (with zoom) and 1 to 20 units tall. Here comes the fun: make NumberPlane/Axes with 40x20 grid covering roughly given rectangle at screen, draw all lines, squares and polygons inside it in grid coordinates. As one of the steps, zoom it 20 times and scale objects 20 times as well (at one or in sequence). At best don't scale texts and line widths ad dynamically adjust label spacing.
Really helpful as I always wanted to make learning of mathematics with python language interesting... This library is actually doing what I was looking for you... Thanks for your effort Benjamin... :-)
Thanks, for a very helpful and well thought thorough tutorial. Looking forward to the next one.
I didn't know all that interesting things that can be done with the configuration. Thanks for the effort. Greetings from Mexico 🇲🇽
Well, that's what this series is here for! Glad you find it helpful. :-)
Amazing video, very well explained, and step-by-step examples with each and every detail I never expected.
Great video! I find it very complementary to the written tutorials. Tanks :)
Thank you! :-)
Thank you for the video tutorials. I am new to manim. Hope to practice and get good at it.
Thank you very much! You have a great rythm, it's very easy to follow. You are super helpful!
Great tutorial Benjamin. Congrats!
Is it possible to align separate text objects so that they sit on the same line?
Rather than having the bottom of "help" (the bottom point of the p) aligned with the bottom of "me" (the bottom of either letter). So "help" ends up slightly above "me".
Thank you for another great episode! In terms of feedback, I was going to say that throughout the video I was hoping to see how we can animate object and group positions and arrangements, but since you mentioned at the end that this will follow in the next episode I'll just look forward to that one. :) Keep up the great work!
Thanks for the kind words! Indeed, my plan is to make the next episode about all sorts of animations. :-)
Great video!
I changed some parameters like the background color, the default color of the MathTex objects, etc.
Is there a way to change some parameter of some animation?
For example, I use the Indicate animation lots of time, the default color for Indicate animation is YELLOW.
Is there a way to change the default color for all the callbacks of the Indicate class, or the run_time parameter for example.
Thank you.
Unfortunately the Animation class currently doesn't support the same `set_default`-mechanism that Mobjects do -- maybe at some point in the future! You can build something similar yourself though, take a look how we are doing it for Mobject: github.com/ManimCommunity/manim/blob/7c9f98c090d62a54e4c435b583e65e41974bda91/manim/mobject/mobject.py#L181
This is brilliant. I subbed since the first second.
Very useful and clear ! Thank you !
perfect, and great explanation, keep going ❤
Is it true? shift work with manim units where are next_to work differently . Why in next to 1*UP+1*RIGHT has different meaning that 1*UP+1*RIGHT in next to . As you have mentioned 1*UP+1*RIGHT in next_to example it transform dot2 to 1,1 in plane but at different position!?
In the shift method, you specify the exact vector a mobject is shifted for. In next_to, you only specify the direction in which, relative to the given anchor, your mobject should be moved. The "buff" parameter controls the distance in next_to. Does that help?
Thanks for guidance
I glanced at stuff, and I understood your point immediately. Thank you!!!💩
I'm always watching it well.
I'm sorry, but can you add subtitles?
What IDE are you using? How do you get all the Manim suggestions shown at 12:06?
I am using VS Code -- my friend Naveen has a pretty detailed guide on how to set things up correctly, see here: www.naveenmk.me/manim/manim-configuration-for-vscode/
Great work!! Please keep going
Keep it up, Ad! Greeting from a member in the group 👍🏻 😁
Ad? :-) Thank you, the next episode will drop in the next few days (I hope).
@@behackl My bad! In my country, we often shorten admin as Ad. I mean you’re the “Admin” of the group. Can’t wait to watch the video, cheers!
I'm pretty sure that you're the only person who has explained the Munites in his video.
I really appreciate the good work.
By the way, it was really hard for me to follow the video because of the music.
I could use subtitles instead, but they cover the video, so I didn't use them.
Thanks for the kind words! I wish RUclips would support multiple audio tracks per video, otherwise it is hard to please everyone. :-)
@@behackl Though I think a video without music would be a compromise plan, don't you think?
@@djfn4s3r45 I'll think about it, but it's not a straightforward compromise; I also got feedback that others found that the music made the videos more engaging for them.
@@behackl It's completely up to your preferences, Ben.
I appreciate your feedback.
Nuevamente, disfruté mucho el episodio. Muchas muchas gracias. (Thanks!)
Great Video! Thanks
Thank you and Keep the videos coming Ben!
I loved the video, really informative! I learned a lot from it. Also, the music creates a really chill atmosphere :)!
It would be amazing if I could use Manim to demonstrate a 3D brain and the electro signals capture by the eeg sensors. Is this possible? Thanks
Nice video and very useful.
1. Is there any chance that you could increase your text size in future videos? It's a little small for old folk like me.
2. I've been playing around with manim (only for the last 3 days though - I'm a noob) and have been animating objects via the set_x() and set_y() methods. I don't really understand how the x/y units accessible via those setters relate to the Munit/pixel positions that you have discussed here. Could you explain, please?
Danke im voraus!
Thanks for the feedback!
1. I'll try to remember making the font size a bit larger when recording the next episode, sure. Bear with me, I'm new to producing this sort of content, might take a while until I get things figured out. :-)
2. The values you are passing to set_x and set_y are exactly the Munit measurements of the scene: mobj.set_x(0).set_y(0) will move your mobject's center to the center of the scene; mobj.set_y(4) will move it exactly to the top of the scene and so on. You could also move your mobejcts using mobj.move_to([x, y, 0]), that should have the same effect as using set_x and set_y. Maybe go to the interactive notebook I've linked in the video description and just try how your approach of using set_x & set_y compares to the other positioning methods discussed in the video. That might help - but feel free to keep asking if not!
@@behackl Thanks for the response. Four more points/questions:
1. I've found that it's much easier to understand how the coord. system is layed out if I temporarily add a NumberPlane to the Scene.
2. If I add a NumberPlane and an Axes to the Scene, then I can see that the Axes units and NumberPlane units differ, but I can't see how to fix this, or why it should be. This seems to be unnecessarily confusing - shouldn't the two sets of units coincide?
3. Where is the best place to report bugs in the community version? There seem to be at least some bugs related to Axes display in a NumberPlane, and with tip size control (seems not to work at all, AFAICS)
4. It would be very helpful if, in a later video, you could discuss the animation model in some detail. At the moment, I'm not finding it easy to construct a mental picture of how it works, or what the canonical approach to animation is.
@@scollyer.tuition 1: sure, makes sense; whatever helps.
2: No, this is more or less intended: with Axes, you are supposed to specify the x_range and y_range, and these might just not be in a 16:9 ratio so that stretching the axes lengths to make them fit the scene dimensions is not a good default behavior. There are x_length and y_length keyword arguments though with which you can control the axes lengths yourself.
3: Please report bugs to github.com/manimCommunity/manim/issues
4. My plan is to make the next episode about animations, it might just take a few more days until I find the time to produce it.
@@behackl Thanks for the rapid and detailed response.
I'm rather confused about the Axes units, given your explanation. My main interest in manim at the moment is animation of 2D graphs, and more specifically, dots moving on graphs (to illustrate tangent vectors to curves, etc)
I was intending to do this via the set_x()/set_y() methods driven off a ValueTracker, but the (x,y) coords produced by doing that will be incorrect if I display an Axes. I guess I'm misunderstanding how to generate (x,y) coords that are compatible with an Axes instance - mine will be compatible only with a NumberPlane. Anyway, I shall investigate this further on my own.
And completely off-topic: I've looked at some of your German videos and I was wondering if you have an Austrian or Bavarian accent, when you speak German.
@@scollyer.tuition happy to have helped! :-)
If you create an Axes mobject ax, then you can use ax.coords_to_point(x, y) to get the scene coordinates corresponding to your coordinates in your axes. That is, if you want to add a dot at (1,2) in your axes, you could do so with self.add(Dot().move_to(ax.coords_to_point(1, 1))). I'll probably have an example around that in Episode 4, but that might, unfortunately, take while. :-/
My accent is Austrian; I've been living in Carinthia (southern Austria) for most of my life.
thank you for this fantastic tutorial
exuce me y have a screen made on pygame and I want to display a manim code on that screen, is tha posible?
you are a awesome teacher
Thanks. Great !
wonderfull❣❣❣
Thanks!
... and thanks again! It's good to see that you found this helpful!
why does RIGHT for a dot makes the dot not go as far as the SQUARE to the RIGHT?
keep going ❣️
GEM*2!
Great stuff!
ruclips.net/video/1Fv0Nu-Tb7Q/видео.html the green dot seems just 0.5 distance with red dot, why not distance 1? which is one grid.
The next_to method places the mobject in the specified direction (note: just direction) given a certain buffer distance which can be controlled with the "buff" keyword.
@@behackl but for moving a square it was not just direction but exact amount of units UP and RIGHT? How would you explain it?
_
@@behackl I have realized that shift method does what I want but next_to just move it in the direction but by how many units exactly?
@@wojciechmocek4586 The default value of buff is 0.25; next_to moves the appropriate contact point of the mobject to the appropriate point of the target an then adds a buffer of 0.25 times the specified direction.
Can you please provide your complete pdf of your slides it will help a lot in revision
I have updated the video description to include a link to the slides, behackl.github.io/manim-with-ease/slides/e02.html -- hope this helps!
please ad subtitle for this video
What IDE are you using here?
This is VS Code.
You have also blue eyes 4blue1brown😅
can we add another language for text such as Arabic language ?
Yes, you just need to use a font that supports the glyph of the language; see this example in our documentation: docs.manim.community/en/stable/reference/manim.mobject.text.text_mobject.Text.html#multiplefonts
Hello, again. Activate the subtitles please. 😢
If I could do it easily I'd do it -- enabling subtitles requires me to transcribe the entire video. I unfortunately don't have enough time to get this done fast(er), sorry.
@@behackl But RUclips has an AI that translates everything.
@@Autistaar the automatically generated subtitles are not available for these videos. :(