ManimCommunity / ManimCommunity/manim

ImageMobject misses attributes when rendered with OpenGL

Open
#3,113 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
40.9k
Forks
3.1k
Avg merge
3d 12h
Merged PRs (30d)
25

Description

## Description of bug / unexpected behavior

When using adding an `ImageMobject` to a scene rendered with OpenGL, an error is raised about it missing the `should_render` attribute.

## Expected behavior

The missing `should_render` attribute should be added by `OpenGLImageMobject` and the error thus not thrown.

## How to reproduce the issue

Code for reproducing the problem

Run with `manim -pql main.py OpenGLImage --renderer=opengl`

```py
class OpenGLImage(Scene):
def construct(self):
self.add(ImageMobject("path/to/any/image"))
```

## Additional media files

Images/GIFs

## Logs
Terminal output

```
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ PROJECT\venv\lib\site-pack │
│ ages\manim\cli\render\commands.py:97 in render │
│ │
│ 94 │ │ │ │ for SceneClass in scene_classes_from_file(file): │
│ 95 │ │ │ │ │ with tempconfig({}): │
│ 96 │ │ │ │ │ │ scene = SceneClass(renderer) │
│ ❱ 97 │ │ │ │ │ │ rerun = scene.render() │
│ 98 │ │ │ │ │ if rerun or config["write_all"]: │
│ 99 │ │ │ │ │ │ renderer.num_plays = 0 │
│ 100 │ │ │ │ │ │ continue │
│ │
│ PROJECT\venv\lib\site-pack │
│ ages\manim\scene\scene.py:233 in render │
│ │
│ 230 │ │ │ return True │
│ 231 │ │ self.tear_down() │
│ 232 │ │ # We have to reset these settings in case of multiple renders. │
│ ❱ 233 │ │ self.renderer.scene_finished(self) │
│ 234 │ │ │
│ 235 │ │ # Show info only if animations are rendered or to get image │
│ 236 │ │ if ( │
│ │
│ PROJECT\venv\lib\site-pack │
│ ages\manim\renderer\opengl_renderer.py:489 in scene_finished │
│ │
│ 486 │ │ │
│ 487 │ │ if self.should_save_last_frame(): │
│ 488 │ │ │ config.save_last_frame = True │
│ ❱ 489 │ │ │ self.update_frame(scene) │
│ 490 │ │ │ self.file_writer.save_final_image(self.get_image()) │
│ 491 │ │
│ 492 │ def should_save_last_frame(self): │
│ │
│ PROJECT\venv\lib\site-pack │
│ ages\manim\renderer\opengl_renderer.py:468 in update_frame │
│ │
│ 465 │ │ self.refresh_perspective_uniforms(scene.camera) │
│ 466 │ │ │
│ 467 │ │ for mobject in scene.mobjects: │
│ ❱ 468 │ │ │ if not mobject.should_render: │
│ 469 │ │ │ │ continue │
│ 470 │ │ │ self.render_mobject(mobject) │
│ 471 │
│ │
│ PROJECT\venv\lib\site-pack │
│ ages\manim\mobject\mobject.py:660 in __getattr__ │
│ │
│ 657 │ │ │ return types.MethodType(setter, self) │
│ 658 │ │ │
│ 659 │ │ # Unhandled attribute, therefore error │
│ ❱ 660 │ │ raise AttributeError(f"{type(self).__name__} object has no attribute '{attr}'") │
│ 661 │ │
│ 662 │ @property │
│ 663 │ def width(self): │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: ImageMobject object has no attribute 'should_render'
```

## System specifications

System Details

- OS (with version, e.g., Windows 10 v2004 or macOS 10.15 (Catalina)): Microsoft Windows 10 Pro 10.0.19044
- RAM: 16GB
- Python version (`python/py/python3 --version`): Python 3.9.0
- Installed modules (provide output from `pip list`):
```
Package Version
------------------- ------------
certifi 2022.12.7
charset-normalizer 2.1.1
click 8.1.3
click-default-group 1.2.2
cloup 0.13.1
colorama 0.4.6
colour 0.1.5
commonmark 0.9.1
decorator 5.1.1
ffmpeg-python 0.2.0
filelock 3.9.0
future 0.18.2
glcontext 2.3.7
gTTS 2.3.0
huggingface-hub 0.11.1
humanhash3 0.0.6
idna 3.4
isosurfaces 0.1.0
manim 0.17.2
manim-voiceover 0.2.1.post1
ManimPango 0.4.3
mapbox-earcut 1.0.1
moderngl 5.7.4
moderngl-window 2.4.2
more-itertools 9.0.0
multipledispatch 0.6.0
mutagen 1.46.0
networkx 2.8.8
numpy 1.24.1
packaging 22.0
Pillow 9.3.0
pip 21.3.1
playsound 1.3.0
PyAudio 0.2.13
pycairo 1.23.0
pydub 0.25.1
pyglet 2.0.2.1
Pygments 2.14.0
pynput 1.7.6
pyrr 0.10.3
python-dotenv 0.21.0
PyYAML 6.0
regex 2022.10.31
requests 2.28.1
rich 13.0.0
scipy 1.9.3
screeninfo 0.8.1
setuptools 60.2.0
six 1.16.0
skia-pathops 0.7.4
sox 1.4.1
srt 3.5.2
stable-ts 1.0.1
svgelements 1.9.0
tokenizers 0.13.2
torch 1.13.1
torchaudio 0.13.1+cu116
torchvision 0.14.1+cu116
tqdm 4.64.1
transformers 4.25.1
typing_extensions 4.4.0
urllib3 1.26.13
watchdog 2.2.1
wheel 0.37.1
whisper 1.0
```

LaTeX details

+ LaTeX distribution (e.g. TeX Live 2020): NONE
+ Installed LaTeX packages:

FFMPEG

Output of `ffmpeg -version`:

```
ffmpeg version 5.1.2-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12.1.0 (Rev2, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
```

## Additional comments

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the issue with `manim -pql main.py OpenGLImage --renderer=opengl`, then inspect the OpenGL rendering path in `manim/renderer/opengl_renderer.py` and the mobject attribute handling shown in `manim/mobject/mobject.py`. Done means adding the missing `should_render` attribute for `OpenGLImageMobject` so the provided ImageMobject scene renders without the AttributeError.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
computer-graphics
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.