Unreal Engine 5 plugin for submitting Movie Render Queue (MRQ) jobs to OpenCue and executing them through OpenCue workers.
- Current production path is one-shot execution:
- UE submits to OpenCue.
- RQD starts
opencue-ue-agentper task. - Agent starts one
UnrealEditor-Cmd.exeprocess per task.
- Persistent worker pool mode remains in code as an evolution path and is currently TODO / not the validated mainline.
This plugin is only the UE-side integration. OpenCue infrastructure and execution services are external.
- UE plugin side:
- Builds
render_plan.jsonandsubmit_spec.json. - Calls submitter CLI with
submit --spec <submit_spec.json>.
- Builds
- OpenCue services side (
opencue-ue-services):opencue-ue-submittersubmits jobs to Cuebot.opencue-ue-agentexecutes tasks from RQD.
- OpenCue core:
- Cuebot + PostgreSQL + RQD + CueGUI.
- In MRQ, user submits an OpenCue job.
- Plugin writes:
Saved/OpenCueRenderPlans/<job_id>.jsonSaved/OpenCueSubmitSpecs/<job_id>_submit_spec.json
- Plugin calls submitter CLI:
- runtime mode:
opencue-ue-submitter.exe submit --spec ... - developer mode:
python -m src.ue_submit submit --spec ...
- runtime mode:
- Cuebot dispatches tasks to RQD.
- RQD runs:
opencue-ue-agent.bat run-one-shot-plan --plan-path <render_plan_path>
- Agent resolves task index from
CUE_IFRAME(fallbackCUE_FRAME) and launchesUnrealEditor-Cmd.exe.
Project Settings path: Plugins -> OpenCue Settings.
Resolution logic:
- If
Python Pathis non-empty:- plugin uses developer mode (
python -m src.ue_submit ...). Submitter Pathis treated as module root hint (directory containingsrc/ue_submit).
- plugin uses developer mode (
- If
Python Pathis empty:- plugin uses runtime mode.
Submitter Pathpoints to a directory or executable (.exe/.bat/.cmd/.py).
- If
Submitter Pathis empty:- plugin auto-discovers bundled submitter executable in plugin directories.
Notes:
--specis always passed as an absolute path.- Working directory is selected to match the chosen mode so relative imports and local resources resolve consistently.
For -game rendering, GameMode is resolved in this order:
- MRQ OpenCue panel:
GameMode Override (-game mode)(per job) - MRQ native
Game Overridessetting:GameModeOverride - Selected map
WorldSettings.GameMode Override - Project setting fallback:
OpenCue Settings -> CommandLine Rendering -> Fallback GameMode Class (-game mode)
Resolved value is applied via map option:
<MapAssetPath>?game=<ClassPath>
OpenCue Job/Layer progress is task-completion based:
progress ~= succeeded_tasks / total_tasks- Task-internal render percent does not directly drive default CueGUI job/layer progress bars.
Implication for UE:
- One long task tends to look like
0% -> 100%jump. - Smoother OpenCue progress comes from task splitting (for example frame chunking), not from in-process percent logs alone.
UI rule: keep UE-facing naming in UE terms; expose OpenCue terms only where required.
| UE/OpenCue Field | Meaning |
|---|---|
| MRQ Job row name | UE-local queue naming |
| OpenCue Job Name | Submitted OpenCue job.name |
| OpenCue Job Name default | MRQ Job row name, fallback to Sequence name |
| Show Name | OpenCue show/project domain for submission |
Users can submit from MRQ without learning OpenCue internals; mapping is handled by plugin + submitter.
| Module | Type | Responsibility |
|---|---|---|
OpenCueForUnreal |
Runtime | Core runtime integration |
OpenCueForUnrealUtils |
Runtime | Shared utilities and encoder helpers |
OpenCueForUnrealCmdline |
Runtime | Command-line executor for OpenCue one-shot rendering |
OpenCueForUnrealEditor |
Editor | MRQ job type, settings, details customization, submit actions |
- Unreal Engine 5.4+
- Movie Render Pipeline plugin enabled
- OpenCue backend running (
cuebot,rqd, DB) opencue-ue-servicesavailable for submit/execute binaries and launch scripts




