Summary
UMovieGraphPipeline::Initialize is BlueprintCallable and accepts an editor world, so Movie Render Graph can be driven programmatically from editor Python (no executor) — useful for automated linear-content pipelines. The pipeline initializes, builds its shot list, logs “MovieGraph Initializing Camera Cut [1/1]” — then the editor dies with EXCEPTION_ACCESS_VIOLATION reading 0x0000000000000540, entirely inside MovieRenderPipelineCore on its own OnBeginFrame tick.
Cause — MovieGraphCoreTimeStep.cpp:785 (GetBlendedMotionBlurAmount):
APlayerCameraManager* PlayerCameraManager = GetWorld()->GetFirstPlayerController()->PlayerCameraManager;
if (PlayerCameraManager) // null-checks the wrong pointer
It guards PlayerCameraManager but dereferences GetFirstPlayerController() unguarded. An EWorldType::Editor world has no player controller; the faulting address 0x540 is exactly the PlayerCameraManager member offset.
Checked before filing: (1) the call site (UpdateFrameMetrics) runs unconditionally for every produced frame — no graph setting skips it; (2) the time-step class is graph-selectable, but every shipped class descends from UMovieGraphCoreTimeStep; (3) GetBlendedMotionBlurAmount is virtual but not a UFUNCTION, so a Python subclass cannot override it.
What Type of Bug are you experiencing?
Editor
Steps to Reproduce
- UE 5.8.1, any project with the Movie Render Pipeline plugin enabled. Open an editor world (no PIE session). A Level Sequence with one camera cut bound to a camera actor in the level.
- In the editor Python console:
import unreal
world = unreal.EditorLevelLibrary.get_editor_world() # EWorldType::Editor
pipeline = unreal.new_object(unreal.MovieGraphPipeline, outer=world)
pipeline.initialize(job, graph) # a MoviePipelineExecutorJob for the sequence + any Movie Graph config
- Let the editor tick. On the first frame after “MovieGraph Initializing Camera Cut [1/1]” the editor crashes.
Expected Result
Either Initialize refuses an editor world up front, or the time step handles the absent player controller — the existing if (PlayerCameraManager) branch suggests that was the intent. A one-line null check on GetFirstPlayerController() with fallback (no blended motion blur) would make the whole editor-world drive path usable for automated rendering pipelines.
Observed Result
Hard editor crash (EXCEPTION_ACCESS_VIOLATION reading 0x0000000000000540) on the pipeline’s first OnBeginFrame tick after camera-cut initialization. Log excerpt:
LogMovieRenderPipeline: Initializing MovieGraph Render
LogMovieRenderPipeline: Finished initializing MovieGraph Render
LogMovieRenderPipeline: MovieGraph Initializing Camera Cut [1/1] … InnerName: GL_MRGProbeCam.
LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000540
LogWindows: Error: [Callstack] UnrealEditor-MovieRenderPipelineCore.dll!UnknownFunction
No project code on the stack — the crash is entirely inside MovieRenderPipelineCore.
Affects Versions
5.8
Platform(s)
Windows