From d221073360f600b3f348c178b18d085c7cac2f06 Mon Sep 17 00:00:00 2001 From: Tony031218 <975062472@qq.com> Date: Sat, 2 Jan 2021 19:20:25 +0800 Subject: [PATCH] update README.md --- README.md | 35 +++-------------------------------- manim_docker_diagram.png | Bin 18659 -> 0 bytes 2 files changed, 3 insertions(+), 32 deletions(-) delete mode 100644 manim_docker_diagram.png diff --git a/README.md b/README.md index f556df42..87054e1c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ ![logo](logo/cropped.png) -[![Build Status](https://travis-ci.org/3b1b/manim.svg?branch=master)](https://travis-ci.org/3b1b/manim) -[![Documentation](https://img.shields.io/badge/docs-EulerTour-blue.svg)](https://www.eulertour.com/learn/manim/) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://choosealicense.com/licenses/mit/) [![Manim Subreddit](https://img.shields.io/reddit/subreddit-subscribers/manim.svg?color=ff4301&label=reddit)](https://www.reddit.com/r/manim/) [![Manim Discord](https://img.shields.io/discord/581738731934056449.svg?label=discord)](https://discord.gg/mMRrZQW) @@ -45,7 +43,6 @@ python3 ./manim.py example_scenes.py SquareToCircle * Install latex as above. * Create a conda environment using `conda env create -f environment.yml` -* **WINDOWS ONLY** Install `pyreadline` via `pip install pyreadline`. ### Using `virtualenv` and `virtualenvwrapper` @@ -56,34 +53,6 @@ mkvirtualenv -a manim -r requirements.txt manim python3 -m manim example_scenes.py SquareToCircle ``` -### Using Docker -Since it's a bit tricky to get all the dependencies set up just right, there is a Dockerfile and Compose file provided in this repo as well as [a premade image on Docker Hub](https://hub.docker.com/r/eulertour/manim/tags/). The Dockerfile contains instructions on how to build a manim image, while the Compose file contains instructions on how to run the image. - -The prebuilt container image has manim repository included. -`INPUT_PATH` is where the container looks for scene files. You must set the `INPUT_PATH` -environment variable to the absolute path containing your scene file and the -`OUTPUT_PATH` environment variable to the directory where you want media to be written. - -1. [Install Docker](https://docs.docker.com) -2. [Install Docker Compose](https://docs.docker.com/compose/install/) -3. Render an animation: -```sh -INPUT_PATH=/path/to/dir/containing/source/code \ -OUTPUT_PATH=/path/to/output/ \ -docker-compose run manim example_scenes.py SquareToCircle -l -``` -The command needs to be run as root if your username is not in the docker group. - -You can replace `example.scenes.py` with any relative path from your `INPUT_PATH`. - -![docker diagram](./manim_docker_diagram.png) - -After running the output will say files ready at `/tmp/output/`, which refers to path inside the container. Your `OUTPUT_PATH` is bind mounted to this `/tmp/output` so any changes made by the container to `/tmp/output` will be mirrored on your `OUTPUT_PATH`. `/media/` will be created in `OUTPUT_PATH`. - -`-p` won't work as manim would look for video player in the container system, which it does not have. - -The first time you execute the above command, Docker will pull the image from Docker Hub and cache it. Any subsequent runs until the image is evicted will use the cached image. -Note that the image doesn't have any development tools installed and can't preview animations. Its purpose is building and testing only. ## Using manim Try running the following: @@ -104,11 +73,13 @@ Set `MEDIA_DIR` environment variable to specify where the image and animation fi Look through [https://github.com/3b1b/videos](https://github.com/3b1b/videos) to see the code for previous 3b1b videos. Note, however, that developments are often made to the library without considering backwards compatibility with those old projects. To run an old project with a guarantee that it will work, you will have to go back to the commit which completed that project. ### Documentation -Documentation is in progress at [eulertour.com/learn/manim](https://www.eulertour.com/learn/manim/). +Documentation is in progress at [eulertour.com/docs](https://www.eulertour.com/docs/). And there is also an all-in-one documentation and tutorials maintained by **@manim-kindergarten**: [manim.ml](https://manim.ml/) (in Chinese). ### Walkthrough Todd Zimmerman put together a [tutorial](https://talkingphysics.wordpress.com/2019/01/08/getting-started-animating-with-manim-and-python-3-7/) on getting started with manim, which has been updated to run on Python 3.7. +[manim-kindergarten](https://github.com/manim-kindergarten/) wrote and collected some useful extra classes and some codes of videos in [manim_sandbox repo](https://github.com/manim-kindergarten/manim_sandbox). + ## Contributing Is always welcome. In particular, there is a dire need for tests and documentation. diff --git a/manim_docker_diagram.png b/manim_docker_diagram.png deleted file mode 100644 index 44a6d74099b7f5a176d7255d28f8337aec704653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18659 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