# Track frame progress in Python MoviePipelinePythonHostExecutor

**URL:** <https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474>\
**Category:** Programming & Scripting\
**Tags:** Python, unreal-engine, editor, Rendering, question\
**Created:** [February 21, 2024, 8:06pm UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474 "2024-02-21T20:06:04Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![mp5gosu](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@mp5gosu](https://forums.unrealengine.com/u/mp5gosu)\
**Post date:** [February 21, 2024, 8:06pm UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474/1 "2024-02-21T20:06:04Z")

</div>

Hi there.

I’m currently looking for a way to report progress from a custom MoviePipelineExecutor.  
Especially spawned PIEExecutors.

I’m working on a renderfarm executor that works in editor mode (due to object IDs and some custom stuff).  
I was taking the approach from the example Deadline plugin as that seamed like a reasonable way to start off.  
So I implemented my custom Executor in which I spawn PIEExecutors to render my queue. (Actually one job per queue). Rendering is fine, on\_finished delegates are working and everything is fine but the progress for the single job.

Seems like MoviePipelineLibrary’s [get\_completion\_percentage](https://docs.unrealengine.com/4.27/en-US/PythonAPI/class/MoviePipelineLibrary.html?highlight=moviepipelinelibrary#unreal.MoviePipelineLibrary) would be the way to go but it seems that’s only feasible when rendering in -game mode. At least in my tests, Unreal threw errors when I tried to provide a loaded world.

edit: I’m using UnrealEditor-CMD which is launched with a python script to kick off the rendering.

So, is there any solution to get the progress from a PIEExecutor or should I take another, completely different approach?

The docs aren’t really helpful for this topic.

Appreciate any help on this!

---

<div class="post-metadata">

**Author:** ![wkw1125](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/wkw1125/32/971969_2.png) [@wkw1125](https://forums.unrealengine.com/u/wkw1125)\
**Post date:** [September 20, 2024, 10:02am UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474/2 "2024-09-20T10:02:22Z")

</div>

mark。I got the shame issue as yours

---

<div class="post-metadata">

**Author:** ![Boojs](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Boojs](https://forums.unrealengine.com/u/Boojs)\
**Post date:** [December 2, 2024, 9:52pm UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474/3 "2024-12-02T21:52:12Z")

</div>

Hi there,

I finally managed to solve this on my custom executor (PIE).

Here is my code snippet, feel free to modify or point out any issues I might have

```auto
    @unreal.ufunction(override=True)
    def on_begin_frame(self):
        super(<myCustomExecutor>, self).on_begin_frame()
        if self.pieExecutor and self.job:
            current_progress = self.job.get_status_progress() * 100
            
            # We only want to log progress if it has changed, otherwise we'll spam the log during every engine tick
            if not hasattr(self, 'last_logged_progress'):
                self.last_logged_progress = -1.0
            
            if current_progress != self.last_logged_progress:
                unreal.log(f"{prefix} Progress: {current_progress}")
                self.last_logged_progress = current_progress

```

output:

```auto
[2024.12.02-21.42.55:154][740]LogPython: [MRQ] Progress: 69.921875
[2024.12.02-21.42.55:784][741]LogPython: [MRQ] Progress: 70.05208134651184
[2024.12.02-21.42.56:333][742]LogPython: [MRQ] Progress: 70.18229365348816
[2024.12.02-21.42.57:606][743]LogPython: [MRQ] Progress: 70.3125

```

---

<div class="post-metadata">

**Author:** ![Data\_Vision](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/data_vision/32/1118730_2.png) [@Data\_Vision](https://forums.unrealengine.com/u/Data_Vision)\
**Post date:** [June 7, 2026, 7:51pm UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474/4 "2026-06-07T19:51:50Z")

</div>

> [@Boojs](#):
>
> ```auto
> @unreal.ufunction(override=True)
> def on_begin_frame(self):
> super(<myCustomExecutor>, self).on_begin_frame()
> if self.pieExecutor and self.job:
> current_progress = self.job.get_status_progress() * 100
>             
> # We only want to log progress if it has changed, otherwise we'll spam the log during every engine tick
> if not hasattr(self, 'last_logged_progress'):
> self.last_logged_progress = -1.0
> 
> ```

Hello,

I’m trying to do the same for a MovieGraph Pipeline, and i can’t figure it out.

Specifically, i don’t know how to get the moviegraphpipeline for the job being rendered to pass to **get\_completion\_percentage** from the moviegraph library. Or maybe this isn’t the right function to use.

Any ideas, @comlys maybe ?

---

<div class="post-metadata">

**Author:** ![comlys](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/comlys/32/998665_2.png) [@comlys](https://forums.unrealengine.com/u/comlys)\
**Post date:** [June 9, 2026, 1:52am UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474/5 "2026-06-09T01:52:10Z")

</div>

`UMovieGraphBlueprintLibrary::GetCompletionPercentage()` is likely not the right thing to use here, since getting access to a pipeline object outside of an executor is difficult.

However, `UMoviePipelineExecutorJob::GetStatusProgress()` should provide the same information without needing a pipeline object, and is available in BPs and Python.

---

<div class="post-metadata">

**Author:** ![Data\_Vision](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/data_vision/32/1118730_2.png) [@Data\_Vision](https://forums.unrealengine.com/u/Data_Vision)\
**Post date:** [June 27, 2026, 8:41am UTC](https://forums.unrealengine.com/t/track-frame-progress-in-python-moviepipelinepythonhostexecutor/1704474/6 "2026-06-27T08:41:30Z")

</div>

Worked out fine, thanks 🙂
