diff --git a/README.md b/README.md index 15769200..a91ec2d4 100644 --- a/README.md +++ b/README.md @@ -74,19 +74,29 @@ python3 -m manim example_scenes.py SquareToCircle -pl ### 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. -In order to do this with the Compose file, you must set the `INPUT_PATH` -environment variable to the directory containing your source code and the -`OUTPUT_DIRECTORY` environment variable to the directory where you want media -to be written. +The prebuilt container image has manin 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/dir/for/media \ +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`. + + + +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. diff --git a/docker-compose.yml b/docker-compose.yml index 9941d1c3..4a25a0dc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: - manim - --media_dir=/tmp/output volumes: - - ${INPUT_DIR:?INPUT_DIR environment variable isn't set}:/tmp/input - - ${OUTPUT_DIR:?OUTPUT_DIR environment variable isn't set}:/tmp/output + - ${INPUT_PATH:?INPUT_PATH environment variable isn't set}:/tmp/input + - ${OUTPUT_PATH:?OUTPUT_PATH environment variable isn't set}:/tmp/output working_dir: /tmp/input network_mode: "none" diff --git a/manim_docker_diagram.png b/manim_docker_diagram.png new file mode 100644 index 00000000..44a6d740 Binary files /dev/null and b/manim_docker_diagram.png differ