3b1b-manim/manimlib/__main__.py

67 lines
1.6 KiB
Python
Raw Normal View History

2021-02-07 17:43:05 +08:00
#!/usr/bin/env python
2024-12-11 10:33:50 -06:00
from addict import Dict
2022-04-12 19:19:59 +08:00
from manimlib import __version__
from manimlib.config import manim_config
from manimlib.config import parse_cli
2021-02-07 17:45:18 +08:00
import manimlib.utils.init_config
import manimlib.extract_scene
from manimlib.window import Window
from IPython.terminal.embed import KillEmbedded
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from argparse import Namespace
def run_scenes():
"""
Runs the scenes in a loop and detects when a scene reload is requested.
"""
# Create a new dict to be able to upate without
# altering global configuration
2024-12-11 10:33:50 -06:00
scene_config = Dict(manim_config.scene)
run_config = manim_config.run
if run_config.show_in_window:
# Create a reusable window
window = Window(**manim_config.window)
scene_config.update(window=window)
while True:
try:
# Blocking call since a scene may init an IPython shell()
scenes = manimlib.extract_scene.main(scene_config, run_config)
for scene in scenes:
scene.run()
return
except KillEmbedded:
# Requested via the `exit_raise` IPython runline magic
# by means of the reload_scene() command
pass
except KeyboardInterrupt:
break
2021-02-07 17:43:05 +08:00
def main():
"""
Main entry point for ManimGL.
"""
2021-10-07 17:42:23 +08:00
print(f"ManimGL \033[32mv{__version__}\033[0m")
args = parse_cli()
2021-11-30 11:28:26 -08:00
if args.version and args.file is None:
2021-10-07 17:42:23 +08:00
return
2021-02-07 17:45:18 +08:00
if args.config:
manimlib.utils.init_config.init_customization()
return
2021-02-25 08:48:50 -08:00
run_scenes()
2021-04-09 20:17:21 +08:00
2021-11-30 11:28:26 -08:00
if __name__ == "__main__":
2021-04-09 20:17:21 +08:00
main()