mirror of
https://github.com/jeertmans/manim-slides.git
synced 2025-05-18 03:05:21 +08:00

* wip: use PyQT5 for window display * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * wip: first slide is shown * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * wip: pushing non-working code * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * wip: some logging * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * feat: new configuration wizard working * fix: prevent key error * wip: making action work * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * wip: soon done! info + video * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: bugs in sleep and exiting * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * try: offscreen * fix: pop default value if not present * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * feat: add aspect ratio option * chore: typing wip * fix: now() function returns seconds, not milliseconds anymore Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
import os
|
|
import sys
|
|
from contextlib import contextmanager
|
|
from importlib.util import find_spec
|
|
from typing import Iterator
|
|
|
|
__all__ = [
|
|
"MANIM",
|
|
"MANIM_PACKAGE_NAME",
|
|
"MANIM_AVAILABLE",
|
|
"MANIM_IMPORTED",
|
|
"MANIMGL",
|
|
"MANIMGL_PACKAGE_NAME",
|
|
"MANIMGL_AVAILABLE",
|
|
"MANIMGL_IMPORTED",
|
|
"logger",
|
|
"Scene",
|
|
"ThreeDScene",
|
|
"config",
|
|
"FFMPEG_BIN",
|
|
]
|
|
|
|
|
|
@contextmanager
|
|
def suppress_stdout() -> Iterator[None]:
|
|
with open(os.devnull, "w") as devnull:
|
|
old_stdout = sys.stdout
|
|
sys.stdout = devnull
|
|
try:
|
|
yield
|
|
finally:
|
|
sys.stdout = old_stdout
|
|
|
|
|
|
MANIM_PACKAGE_NAME = "manim"
|
|
MANIM_AVAILABLE = find_spec(MANIM_PACKAGE_NAME) is not None
|
|
MANIM_IMPORTED = MANIM_PACKAGE_NAME in sys.modules
|
|
|
|
MANIMGL_PACKAGE_NAME = "manimlib"
|
|
MANIMGL_AVAILABLE = find_spec(MANIMGL_PACKAGE_NAME) is not None
|
|
MANIMGL_IMPORTED = MANIMGL_PACKAGE_NAME in sys.modules
|
|
|
|
if MANIM_IMPORTED and MANIMGL_IMPORTED:
|
|
from manim import logger
|
|
|
|
logger.warn(
|
|
"Both manim and manimgl are installed, therefore `manim-slide` needs to need which one to use. Please only import one of the two modules so that `manim-slide` knows which one to use. Here, manim is used by default"
|
|
)
|
|
MANIM = True
|
|
MANIMGL = False
|
|
elif MANIM_IMPORTED:
|
|
MANIM = True
|
|
MANIMGL = False
|
|
elif MANIMGL_IMPORTED:
|
|
MANIM = False
|
|
MANIMGL = True
|
|
elif MANIM_AVAILABLE:
|
|
MANIM = True
|
|
MANIMGL = False
|
|
elif MANIMGL_AVAILABLE:
|
|
MANIM = False
|
|
MANIMGL = True
|
|
else:
|
|
raise ModuleNotFoundError(
|
|
"Either manim (community) or manimgl (3b1b) package must be installed"
|
|
)
|
|
|
|
|
|
if MANIMGL:
|
|
from manimlib import Scene, ThreeDScene, config
|
|
from manimlib.constants import FFMPEG_BIN
|
|
from manimlib.logger import log as logger
|
|
|
|
else:
|
|
with suppress_stdout(): # Avoids printing "Manim Community v..."
|
|
from manim import Scene, ThreeDScene, config, logger
|
|
|
|
try: # For manim<v0.16.0.post0
|
|
from manim.constants import FFMPEG_BIN
|
|
except ImportError:
|
|
FFMPEG_BIN = config.ffmpeg_executable
|