@@ -68,6 +68,8 @@ def construct(self):
68
68
69
69
import shutil
70
70
71
+ classnamedict = {}
72
+
71
73
72
74
class ManimDirective (Directive ):
73
75
r"""The ``.. manim::`` directive.
@@ -90,7 +92,13 @@ class ManimDirective(Directive):
90
92
def run (self ):
91
93
from manim import config
92
94
95
+ global classnamedict
96
+
93
97
clsname = self .arguments [0 ]
98
+ if clsname not in classnamedict :
99
+ classnamedict [clsname ] = 1
100
+ else :
101
+ classnamedict [clsname ] += 1
94
102
95
103
display_source = "display_source" in self .options
96
104
save_as_gif = "save_as_gif" in self .options
@@ -147,6 +155,7 @@ def run(self):
147
155
media_dir = os .path .join ("source" , "media" )
148
156
images_dir = os .path .join (media_dir , "images" )
149
157
video_dir = os .path .join (media_dir , "videos" )
158
+ output_file = f"{ clsname } -{ classnamedict [clsname ]} "
150
159
151
160
file_writer_config_code = [
152
161
f'config["frame_rate"] = { frame_rate } ' ,
@@ -157,6 +166,7 @@ def run(self):
157
166
f'file_writer_config["video_dir"] = "{ video_dir } "' ,
158
167
f'file_writer_config["save_last_frame"] = { save_last_frame } ' ,
159
168
f'file_writer_config["save_as_gif"] = { save_as_gif } ' ,
169
+ f'file_writer_config["output_file"] = "{ output_file } "' ,
160
170
]
161
171
162
172
user_code = self .content
@@ -175,23 +185,23 @@ def run(self):
175
185
176
186
# copy video file to output directory
177
187
if not (save_as_gif or save_last_frame ):
178
- filename = f"{ clsname } .mp4"
188
+ filename = f"{ output_file } .mp4"
179
189
filesrc = os .path .join (video_dir , qualitydir , filename )
180
190
destfile = os .path .join (dest_dir , filename )
181
191
shutil .copyfile (filesrc , destfile )
182
192
elif save_as_gif :
183
- filename = f"{ clsname } .gif"
193
+ filename = f"{ output_file } .gif"
184
194
filesrc = os .path .join (video_dir , qualitydir , filename )
185
195
elif save_last_frame :
186
- filename = f"{ clsname } .png"
196
+ filename = f"{ output_file } .png"
187
197
filesrc = os .path .join (images_dir , filename )
188
198
else :
189
199
raise ValueError ("Invalid combination of render flags received." )
190
200
191
201
rendered_template = jinja2 .Template (TEMPLATE ).render (
192
- clsname = clsname ,
193
202
display_source = display_source ,
194
203
filesrc = filesrc [6 :],
204
+ output_file = output_file ,
195
205
save_last_frame = save_last_frame ,
196
206
save_as_gif = save_as_gif ,
197
207
source_block = source_block ,
@@ -211,7 +221,7 @@ def setup(app):
211
221
setup .confdir = app .confdir
212
222
app .add_directive ("manim" , ManimDirective )
213
223
214
- metadata = {"parallel_read_safe" : True , "parallel_write_safe" : True }
224
+ metadata = {"parallel_read_safe" : False , "parallel_write_safe" : True }
215
225
return metadata
216
226
217
227
@@ -227,7 +237,7 @@ def setup(app):
227
237
{% if not (save_as_gif or save_last_frame) %}
228
238
.. raw:: html
229
239
230
- <video class="manim-video" controls loop autoplay src="./{{ clsname }}.mp4"></video>
240
+ <video class="manim-video" controls loop autoplay src="./{{ output_file }}.mp4"></video>
231
241
{% elif save_as_gif %}
232
242
.. image:: {{ filesrc }}
233
243
:align: center
0 commit comments