跳转至

Manim配置

合格名称:manim.\_config.utils.ManimConfig

Python
class ManimConfig

Bases: MutableMapping

类似字典的类存储所有配置选项。

全局config对象是此类的一个实例,并且充当库的所有可自定义行为的单一事实来源。

全局config对象能够消化不同类型的源并将它们转换为统一的接口。这些源是(按优先级升序排列):配置文件、命令行参数和编程更改。无论用户选择如何设置配置选项,她都可以使用 的 ManimConfig属性和属性来访问其当前值。

笔记

每个配置选项都作为此类的属性实现。

每个配置选项都可以使用属性的全名通过配置文件进行设置。如果配置选项具有关联的 CLI 标志,则该标志等于属性的全名。那些承认替代标志或根本没有标志的记录在各个属性的文档字符串中。

例子

为了演示起见,我们在以下示例中使用全局配置对象的副本;config如果您确实想修改配置,可以跳过这些行并直接导入:

Python
from manim import config as global_config
config = global_config.copy()

每个配置选项都允许使用字典语法和属性语法。例如,以下两行是等效的:

Python
1
2
3
from manim import WHITE
config.background_color = WHITE
config["background_color"] = WHITE

前者是优选的;提供后者主要是为了向后兼容。

配置选项旨在保持内部一致性。例如,设置frame_y_radius将影响frame_height

Python
1
2
3
4
5
config.frame_height
8.0
config.frame_y_radius = 5.0
config.frame_height
10.0

与配置选项交互的方式有很多种。以配置选项为例background_color。有三种方法可以更改它:通过配置文件、通过 CLI 标志或以编程方式。

要通过配置文件设置背景颜色,请保存 manim.cfg包含以下内容的以下文件。

INI
[CLI]
background_color = WHITE
为了使该.cfg文件应用于 manim 场景,需要将其放置在与脚本相同的目录中,

Bash
1
2
3
project/
├─scene.py
└─manim.cfg
现在,当用户执行

Bash
manim scene.py
场景的背景将设置为WHITE。无论从何处调用 manim 命令,这都适用。

命令行参数覆盖.cfg文件。在前面的示例中,执行

Bash
manim scene.py -c BLUE

无论 . 的内容如何,​​ 都会将背景颜色设置为蓝色 manim.cfg

最后,场景脚本本身内所做的任何编程更改都将覆盖命令行参数。例如,如果scene.py包含以下内容

Python
1
2
3
4
5
6
from manim import *

config.background_color = RED

class MyScene(Scene):
    ...

manim.cfg无论调用 manim 时使用的 CLI 参数或内容如何,​​ 背景颜色都将设置为 RED 。

方法

copy 深度复制此 ManimConfig 的内容。
digest_args 处理 CLI 参数中存在的配置选项。
digest_file 处理文件中存在的配置选项.cfg
digest_parser 处理对象中存在的配置选项ConfigParser
get_dir 解决存储目录的配置选项。
resolve_movie_file_extension
update ManimConfig消化在另一个或字典中找到的选项。

属性

aspect_ratio 纵横比(宽度/高度),以像素为单位(--分辨率,-r)。
assets_dir 用于查找视频资产的目录(无标志)。
background_color 场景的背景颜色 (-c)。
background_opacity 0.0(完全透明)和 1.0(完全不透明)之间的数字。
bottom 坐标位于框架的中心底部。
custom_folders 是否使用自定义文件夹输出。
disable_caching 是否使用场景缓存。
disable_caching_warning 如果要散列的子对象过多,是否发出警告。
dry_run 是否启用试运行。
enable_gui 启用 GUI 交互。
enable_wireframe 在 opengl 中启用线框调试模式。
ffmpeg_executable 手动指定 ffmpeg 可执行文件的路径
ffmpeg_loglevel ffmpeg 的详细级别(无标志)。
flush_cache 是否删除所有缓存的部分影片文件。
force_window 使用 opengl 渲染器时设置为强制窗口
format 文件格式; “png”、“gif”、“mp4”、“webm”或“mov”。
frame_height 以逻辑单位表示的帧高度(无标志)。
frame_rate 帧速率(以每秒帧数为单位)。
frame_size 元组(像素宽度,像素高度)(无标志)。
frame_width 以逻辑单位表示的帧宽度(无标志)。
frame_x_radius 帧宽度的一半(无标志)。
frame_y_radius 框架高度的一半(无标志)。
from_animation_number 以此数字 (-n) 开始渲染动画。
fullscreen 将窗口扩展至其可能的最大尺寸。
gui_location 启用 GUI 交互。
images_dir 放置图像的目录(无标志)。
input_file 输入文件名。
left_side 坐标位于框架的中间左侧。
log_dir 放置日志的目录。
log_to_file 是否将日志保存到文件中。
max_files_cached 缓存的最大文件数。
media_dir 主输出目录。
media_embed 在 Jupyter 笔记本中嵌入视频
media_width Jupyter 笔记本中的媒体宽度
movie_file_extension .mp4、.webm 或 .mov。
notify_outdated_version 是否有可用版本更新时通知。
output_file 输出文件名 (-o)。
partial_movie_dir 放置部分电影文件的目录(无标志)。
pixel_height 帧高度以像素为单位(--分辨率,-r)。
pixel_width 帧宽度以像素为单位(--分辨率,-r)。
plugins 要启用的插件列表。
preview 是否播放渲染的影片(-p)。
progress_bar 渲染动画时是否显示进度条。
quality 视频质量 (-q)。
renderer 当前活动的渲染器。
right_side 坐标位于框架的右中位置。
save_as_gif 是否以 .gif 格式保存渲染场景 (-i)。
save_last_frame 是否将场景的最后一帧保存为图像文件(-s)。
save_pngs 是否将场景中的所有帧保存为图像文件(-g)。
save_sections 除电影文件外,是否保存每个部分的单个视频。
scene_names 从文件中播放的场景。
sections_dir 放置部分视频的目录(无标志)。
show_in_file_browser 是否在文件浏览器中显示输出文件(-f)。
tex_dir 放置 tex 的目录(无标志)。
tex_template 渲染 Tex 时使用的模板。
tex_template_file 从中读取 Tex 模板的文件(无标志)。
text_dir 放置文本的目录(无标志)。
top 坐标位于框架的中心顶部。
transparent 背景不透明度是否为 0.0 (-t)。
upto_animation_number 在此编号处停止渲染动画。
use_projection_fill_shaders 使用与变换矩阵兼容的着色器进行 OpenGLVM 对象填充。
use_projection_stroke_shaders 使用与变换矩阵兼容的 OpenGLVM 对象描边着色器。
verbosity 记录器冗长;“调试”、“信息”、“警告”、“错误”或“严重”(-v)。
video_dir 放置视频的目录(无标志)。
window_monitor 将渲染场景的监视器
window_position 设置预览窗口的位置。
window_size opengl 窗口的大小。
write_all 是否渲染输入文件中的所有场景 (-a)。
write_to_movie 是否将场景渲染为电影文件 (-w)。
zero_pad PNG 零填充。

属性 aspect_ratio

以像素为单位的宽高比(宽度/高度)(-分辨率,-r)。

属性 asset_dir

用于查找视频资产的目录(无标志)。

属性 background_color

场景的背景颜色 (-c)。

属性 background_opacity

0.0(完全透明)和 1.0(完全不透明)之间的数字。

属性 bottom 坐标位于框架的中心底部。

copy()

深度复制此 ManimConfig 的内容。

返回

该对象的副本不包含共享引用。

返回类型

ManimConfig

也可以看看

tempconfig()

笔记

这就是背后的主要机制tempconfig()

属性 custom_folders

是否使用自定义文件夹输出。

digest_args(args)

处理 CLI 参数中存在的配置选项。

参数

args (命名空间) – 由 . 返回的对象main_utils.parse_args()

返回

self – 该对象在处理parser.

返回类型

ManimConfig

也可以看看

main_utils.parse_args(), digest_parser(), digest_file()

笔记

如果args.config_file是非空字符串,则在消化任何其他 CLI 参数之前ManimConfig尝试消化所述文件的内容。digest_file()

digest_file(filename)

处理文件中存在的配置选项.cfg

此方法处理单个.cfg文件,而 digest_parser()可以处理可能从多个.cfg文件构建的任意解析器。

参数

filename ( str | os.PathLike ) – 文件的路径.cfg

返回

self – 该对象在处理filename.

返回类型

ManimConfig

也可以看看

digest_file(), digest_args(),make_config_parser()

笔记

如果有多个.cfg文件需要处理,首先将它们解析为单个ConfigParser对象并通过一次调用来消化它们 digest_parser()总是比多次调用此方法更有效。

digest_parser(parser)

处理对象中存在的配置选项ConfigParser

此方法可以处理任意解析器,而不仅仅是从单个文件读取的解析器,而且digest_file()一次只能处理一个文件。

参数

parser ( ConfigParser ) – 反映一个或多个文件内容的对象.cfg。特别地,它可以反映已经以级联方式解析的多个文件的内容。

返回

self – 该对象在处理parser.

返回类型

ManimConfig

也可以看看

make_config_parser(), digest_file(),digest_args()

笔记

如果有多个文件需要处理,首先将它们解析为单个对象,然后调用此函数一次(而不是 多次调用).cfg总是更有效。ConfigParserdigest_file()

例子

要消化两个文件中设置的配置选项,首先创建一个 ConfigParser 并解析这两个文件,然后消化解析器:

Python
1
2
3
parser = configparser.ConfigParser()
parser.read([file1, file2])
config = ManimConfig().digest_parser(parser)

事实上,全局config对象是这样初始化的:

Python
parser = make_config_parser()
config = ManimConfig().digest_parser(parser)

属性 disable_caching

是否使用场景缓存。

属性 disable_caching_warning

如果要散列的子对象过多,是否发出警告。

属性 dry_run

是否启用试运行。

属性 enable_gui

启用 GUI 交互。

属性 enable_wireframe

在 opengl 中启用线框调试模式。

属性 ffmpeg_executable

手动指定 ffmpeg 可执行文件的路径

属性 ffmpeg_loglevel

ffmpeg 的详细级别(无标志)。

属性 flush_cache

是否删除所有缓存的部分影片文件。

属性 force_window

使用 opengl 渲染器时设置为强制窗口

属性 format

文件格式; “png”、“gif”、“mp4”、“webm”或“mov”。

属性 frame_height

以逻辑单位表示的帧高度(无标志)。

属性 frame_rate 帧速率(以每秒帧数为单位)。

属性 frame_size

元组(像素宽度,像素高度)(无标志)。

属性 frame_width

以逻辑单位表示的帧宽度(无标志)。

属性 frame_x_radius

帧宽度的一半(无标志)。

属性 frame_y_radius

框架高度的一半(无标志)。

属性 from_animation_number

以此数字 (-n) 开始渲染动画。

属性 fullscreen

将窗口扩展至其可能的最大尺寸。

get_dir(key, **kwargs)

解决存储目录的配置选项。

存储目录的配置选项可能相互依赖。此方法用于向最终用户提供实际目录。

参数

  • key ( str ) – 要解析的配置选项。必须是以 结尾的选项 '_dir',例如'media_dir''video_dir'
  • kwargs ( str ) – 解析目录时要使用的任何字符串。

返回

请求目录的路径。如果路径解析为空字符串,None则返回。

返回类型

pathlib.Path

提高

KeyError – Whenkey不是存储目录的配置选项,因此get_dir()不合适;或者在 key适当的时候但没有足够的信息来解析目录。

笔记

标准str.format()语法用于解析路径,因此路径可以包含使用 f 字符串表示法的任意占位符。但是,这些将需要kwargs包含所需的值。

例子

的值config.tex_dir'{media_dir}/Tex'默认值,即它是所在config.media_dir位置的子文件夹。为了获取实际目录,请使用get_dir().

Bash
1
2
3
4
5
6
7
8
>>> from manim import config as globalconfig
>>> config = globalconfig.copy()
>>> config.tex_dir
'{media_dir}/Tex'
>>> config.media_dir
'./media'
>>> config.get_dir("tex_dir").as_posix()
'media/Tex'

解析目录是在最后一刻以惰性方式完成的,以反映其他配置选项中的任何更改:

Bash
1
2
3
>>> config.media_dir = "my_media_dir"
>>> config.get_dir("tex_dir").as_posix()
'my_media_dir/Tex'

某些目录依赖于 ManimConfig. 例如,video_dir 的默认值 包括输入文件的名称和视频质量(例如 480p15)。此信息必须通过以下方式提供kwargs

Bash
1
2
3
4
5
6
7
>>> config.video_dir
'{media_dir}/videos/{module_name}/{quality}'
>>> config.get_dir("video_dir")
Traceback (most recent call last):
KeyError: 'video_dir {media_dir}/videos/{module_name}/{quality} requires the following keyword arguments: module_name'
>>> config.get_dir("video_dir", module_name="myfile").as_posix()
'my_media_dir/videos/myfile/1080p60'

请注意,质量不需要作为关键字参数传递,因为 ManimConfig它存储有关质量的信息。

目录可以被递归地定义。例如,配置选项 partial_movie_dir取决于video_dir,而后者又取决于media_dir

Bash
1
2
3
4
5
6
7
8
9
>>> config.partial_movie_dir
'{video_dir}/partial_movie_files/{scene_name}'
>>> config.get_dir("partial_movie_dir")
Traceback (most recent call last):
KeyError: 'partial_movie_dir {video_dir}/partial_movie_files/{scene_name} requires the following keyword arguments: scene_name'
>>> config.get_dir(
    "partial_movie_dir", module_name="myfile", scene_name="myscene"
).as_posix()
'my_media_dir/videos/myfile/1080p60/partial_movie_files/myscene'

使用标准 f 字符串语法。定义目录时可以使用任意名称,只要将相应的值传递给 ManimConfig.get_dir()via 即可kwargs

Bash
1
2
3
4
5
6
7
8
9
>>> config.media_dir = "{dir1}/{dir2}"
>>> config.get_dir("media_dir")
Traceback (most recent call last):
KeyError: 'media_dir {dir1}/{dir2} requires the following keyword arguments: dir1'
>>> config.get_dir("media_dir", dir1="foo", dir2="bar").as_posix()
'foo/bar'
>>> config.media_dir = "./media"
>>> config.get_dir("media_dir").as_posix()
'media'

属性 gui_location

启用 GUI 交互。

属性 images_dir

放置图像的目录(无标志)。见ManimConfig.get_dir()

属性 input_file

输入文件名。

属性 left_side 坐标位于框架的中间左侧。

属性 log_dir

放置日志的目录。见ManimConfig.get_dir()

属性 log_to_file

是否将日志保存到文件中。

属性 max_files_cached

缓存的最大文件数。使用 -1 表示无穷大(无标志)。

属性 media_dir

主输出目录。见ManimConfig.get_dir()

属性 media_embed

在 Jupyter 笔记本中嵌入视频

属性 media_width

Jupyter 笔记本中的媒体宽度

属性 movie_file_extension

.mp4、.webm 或 .mov。

属性 notify_outdated_version

是否有可用版本更新时通知。

属性 output_file

输出文件名 (-o)。

属性 partial_movie_dir

放置部分电影文件的目录(无标志)。见ManimConfig.get_dir()

属性 pixel_height

帧高度以像素为单位(-分辨率,-r)。

属性 pixel_width

帧宽度以像素为单位(–分辨率,-r)。

属性 plugins

要启用的插件列表。

属性 preview

是否播放渲染的影片(-p)。

属性 progress_bar

渲染动画时是否显示进度条。

物业 quality

视频质量 (-q)。

属性 renderer

当前活动的渲染器。

填充了 中可用的渲染器之一RendererType

测试:

Bash
>>> test_config = ManimConfig()
>>> test_config.renderer is None  # a new ManimConfig is unpopulated
True
>>> test_config.renderer = 'opengl'
>>> test_config.renderer
<RendererType.OPENGL: 'opengl'>
>>> test_config.renderer = 42
Traceback (most recent call last):
...
ValueError: 42 is not a valid RendererType

检查渲染器类型的大小写是否无关紧要:

Bash
>>> test_config.renderer = 'OpenGL'
>>> test_config.renderer = 'cAirO'

属性 right_side

坐标位于框架的右中位置。

属性 save_as_gif

是否以 .gif 格式保存渲染场景 (-i)。

属性 save_last_frame

是否将场景的最后一帧保存为图像文件(-s)。

属性 save_pngs

是否将场景中的所有帧保存为图像文件(-g)。

属性 save_sections

除电影文件外,是否保存每个部分的单个视频。

属性 scene_names

从文件中播放的场景。

属性 section_dir

放置部分视频的目录(无标志)。见ManimConfig.get_dir()

属性 show_in_file_browser

是否在文件浏览器中显示输出文件(-f)。

属性 tex_dir

放置 tex 的目录(无标志)。见ManimConfig.get_dir()

属性 tex_template

渲染 Tex 时使用的模板。请参阅TexTemplate

属性 tex_template_file

从中读取 Tex 模板的文件(无标志)。见TexTemplateFromFile

属性 text_dir

放置文本的目录(无标志)。见ManimConfig.get_dir()

属性 top

坐标位于框架的中心顶部。

属性 transparent

背景不透明度是否为 0.0 (-t)。

update(obj)

ManimConfig消化在另一个或字典中找到的选项。

与 类似dict.update(),用 的值替换该对象的值obj

参数

obj ( ManimConfig | dict ) – 要从中复制值的对象。

返回类型

None

提高

AttributeError – 如果obj是一个字典,但包含不属于任何配置选项的键。

也可以看看

digest_file(), digest_args(),digest_parser()

属性 upto_animation_number

在此编号处停止渲染动画。使用 -1 以避免跳过 (-n)。

属性 use_projection_fill_shaders

使用与变换矩阵兼容的着色器进行 OpenGLVM 对象填充。

属性 use_projection_lines_shaders

使用与变换矩阵兼容的 OpenGLVM 对象描边着色器。

属性 verbosity 记录器冗长;“调试”、“信息”、“警告”、“错误”或“严重”(-v)。

属性 video_dir

放置视频的目录(无标志)。见ManimConfig.get_dir()

属性 window_monitor

将渲染场景的监视器

属性 window_position

设置预览窗口的位置。您可以使用方向,例如 UL/DR/ORIGIN/LEFT...或窗口左上角的位置(像素),例如“960,540”

属性 window_size

opengl 窗口的大小。“默认”根据显示监视器自动缩放窗口。

属性 write_all

是否渲染输入文件中的所有场景 (-a)。

属性 write_to_movie

是否将场景渲染为电影文件 (-w)。

属性 zero_pad

PNG 零填充。0(无零填充)和 9(最少 9 列)之间的数字。