Skip to content
Back to skills

Scenario Unreal Cinematics

ASecurity

Use when making a trailer, cutscene, cinematic or short film in Unreal Engine 5.8 with Sequencer: shot lists, master and shot sequences, cameras, lenses, depth of field, camera cuts, spawnables, character animation in shots, per-shot lighting, Movie Render Graph or Movie Render Queue EXR renders, "render darker than the viewport", "first frames pop", "last frame missing", ACES or OCIO to DaVinci Resolve, the 180-degree rule, Sequencer Python, or reviewing a cut.

  • 871 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 26, 2026
ai-agentspythongonodegitperformance

Works with

  • cli
  • mcp

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned September 26, 2026

npx -y skills add scenario-labs/skills --skill scenario-unreal-cinematics --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Scenario Unreal Cinematics?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Scenario Unreal Cinematics
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/scenario-labs-scenario-unreal-cinematics/badge)](https://www.skillsdirectory.com/skills/scenario-labs-scenario-unreal-cinematics)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: scenario-unreal-cinematics
description: 'Use when making a trailer, cutscene, cinematic or short film in Unreal Engine 5.8 with Sequencer: shot lists, master and shot sequences, cameras, lenses, depth of field, camera cuts, spawnables, character animation in shots, per-shot lighting, Movie Render Graph or Movie Render Queue EXR renders, "render darker than the viewport", "first frames pop", "last frame missing", ACES or OCIO to DaVinci Resolve, the 180-degree rule, Sequencer Python, or reviewing a cut.'
license: MIT
---

# Cinematics in Unreal Engine 5.8 (Sequencer and Movie Render Graph)

Expert level here means the cut is checked as data before anything is built and a render is judged on its files and frames, not the viewport. The core stance: plan offline, build in one transaction, lock timing against the music before animating, light from approved masters, render per shot through one template graph, hand linear EXRs, an edit and a color note to the grade. If a sibling skill named here is missing from your available skills, ask the user to install it (`npx skills add scenario-labs/skills --skill <name>`); unattended, proceed from tool schemas and flag the gap.

**REQUIRED BACKGROUND:** scenario-unreal-expert (channels, review loop, 5.8 traps).

**Status (2026-09-24):** [`scripts/ue_cine.py`](scripts/ue_cine.py) and [`scripts/cine_render_callbacks.py`](scripts/cine_render_callbacks.py) are **not yet run in Unreal**; offline tests pass (counts: [`references/sources.md`](references/sources.md)). In the engine, run `tests/code/unreal-cinematics/job_00_probe_cine.py` first.

## Stance (the expert delta)

- **The master is an edit; shots own the content.** Cameras, characters and keys live in shots, per-discipline subsequences (lighting, FX) inside shots, so re-pacing moves sections, never animation (Sir Wade, ywtvn1uncZo [00:07:32]; Glitch, uzTo5vQchkk [00:35:24]). Per-shot things are spawnables, the set is possessable, so the cinematic plays in any level (yOcgYMcxr3Q [00:07:53] [00:13:50]); a possessable animated in one shot snaps back after it; Outliner visibility is not saved, Levels panel visibility is ([00:10:34] [00:02:23]). Duplicating a master shares its shots: "someone tweaks lighting, it changes seven shots" (Epic CAT, S4Iyzbl-oaE [00:41:34]); experiment with a New Take.
- **Structure is templated and scripted, never clicked together.** Display rate, start frame, bias, naming and folder template are set once in `DefaultEngine.ini` under revision control (S4Iyzbl-oaE [00:15:22] [00:21:52]); CAT 5.8 schemas nest and can give each shot its own level (VP 5SJA1FfRPWs [00:19:07] [00:20:44]). Every tool is one `ScopedEditorTransaction` around a `ScopedSlowTask`, because "long running Python codes, they look really similar to a frozen engine" (SPI, moQTQzAOFVA [00:16:16]).
- **Lock timing before animating.** Board with constant keys, music on its own track, stingers exactly on cuts; "you don't want to spend time working on frames that will never make it into the final film" (Toonen, mAMp6qCt7kc [00:15:04] [00:15:36] [00:04:55]). Retiming must carry intent: keys move with their shot, spanning subsequences are chopped and each half gets its own asset (moQTQzAOFVA [00:14:04] [00:24:19]).
- **Warm-up is three fixes, and end frames are exclusive.** Idle CPU simulation: Engine Warm Up Count above 30; temporal history: Render Warm Up; anything moving at frame one: animation and camera cut extended before the start with camera-cut warm-up, which evaluates the lead-in instead of holding frame one (tips doc; Comly/Hoffman, demystifying MRQ). A 0 to 50 range renders 0 to 49.
- **Samples buy motion blur and anti-aliasing, nothing else.** Noise goes back to its source (demystifying MRQ; Faucher, fVg5ihB8Wdc [00:09:15]). Temporal only, odd counts with Frame Center, or Blur's 24/48/64 with Frame Close (AAAhD5tEUBs [00:39:32]); AA None above 8 samples; zero console variables until a named shot problem needs one (fVg5ihB8Wdc [00:03:00]).
- **Grade outside from linear EXR, and say how to read it.** Tone curve off gives linear sRGB, about one stop darker than the viewport because UE's tone curve is "ACES flavored, but not a true ACES" (Faucher, 2Q3CybANHKE [00:04:31] [00:09:39]). Resolve's ACES Transform: tone curve on, sRGB (Linear) to sRGB Texture; off, Linear sRGB to sRGB; ACEScg (only for a vendor), ACEScg to sRGB ([00:08:30] [00:09:05]). Light and review through the viewport's OCIO Display set to that view ([00:10:28] [00:11:00]).
- **The shot is the render unit.** "The smallest unit of distributable work in Unreal Engine is a single camera cut" (MRQ command-line doc): one job per shot, one template graph, per-job variable overrides, never edits to the shared graph. Plain MRQ needs babysitting and a crash loses the shots, so unattended multi-shot renders go through a farm manager (Glitch [00:40:14]).
- **Lighting scales by process.** A temp camera light from day one; then one or two signature shots per lighting scenario, locked with the director; then per-shot `_LGT` subsequences derived from them, graded by distance from their master (Glitch [00:27:18] [00:28:51] [00:29:23] [00:31:32] [00:36:59]).

## Establish first

| Input                                         | Changes                              | Default when silent                                                                               |
| --------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------- |
| Delivery: graded or direct                    | tone curve, format, OCIO, color note | graded: EXR 16-bit half, tone curve off                                                           |
| Production record (rate, start, bias, naming) | every sequence, EDL                  | the project's `DefaultEngine.ini`; else 24 fps, start 0 (SPI 101, CAT demo 1000: match editorial) |
| Duration, shots, music                        | layout, stingers                     | the brief; a temp track before boarding                                                           |
| Aspect and filmback                           | lens, framing                        | 16:9 Digital Film [verify mm]; 2.39 crop for scope                                                |
| Level and what exists                         | bindings                             | set possessable; cameras, characters, shot lights spawnable; master lighting in the level         |
| Cast                                          | pre-roll, cost                       | existing Animation Sequences; joints and meshes per character                                     |
| Motion per shot, shutter timing               | samples, pre-roll                    | Frame Center, odd counts                                                                          |
| Exposure                                      | continuity                           | Manual, physical camera, ISO compensates aperture changes                                         |
| Channel                                       | build, board, render                 | live editor (MCP, PythonRemote) for boards; `ue_run` or the command line for finals               |

## Workflow

`import ue_cine as C` (skill `scripts/`, with scenario-unreal-expert's `scripts/` on the path). Full code: [`references/procedures.md`](references/procedures.md).

1. **Scaffold (once per project).** Production defaults recorded once (CAT Production Setup or Project Settings) and copied into `plan["production"]`; folder template, shots in steps of 10; with CAT 5.8, shot schemas holding the `_LGT` schema, a level per shot when shots need unique set states (P2). Check the MCP SequencerTools toolset first [verify]. GATE: `C.check_production(plan)` no fail; `audit_sequence` seq.rate and seq.start.
2. **Plan the cut as data (python3).** Shots, sizes, lenses, camera and subject positions, motion, flags, cast (joints, meshes), stingers, lighting scenarios. `C.check_plan(plan)`: length, lenses, framing, 180-degree line, screen direction, jump cuts, DOF, pre-roll, exposure, cast, stingers, lighting groups (P1). GATE: no fail; every warn fixed or answered in the plan.
3. **Build in one transaction (editor).** `C.build_from_plan(plan)`: master with Shots and music, a spawnable Cine Camera per shot (lens keyed, Use Field of View for LOD on), camera cut from pre-roll to the exclusive end, pre-rolled performers, `<shot>_LGT` with the temp light (P3); never overwrites. GATE: `C.audit_sequence` no fail, `bind.override` answered; `C.empty_level_test` lists only set pieces.
4. **Board and lock the cut (latent editor).** `C.board_generator(..., preroll=True)`: first, middle, last frame per shot plus each shot's first pre-roll frame read in isolation (GUI: Evaluate Sub Sequences In Isolation); `ue_review.image_checks`, contact sheet (P4). Retime (`C.retime_shot`), takes (`C.new_take`), own tools inside `C.editor_tool` (P5). GATE: no all-white or all-black frame, the sheet and the cut with music judged, `C.ready_to_animate(plan)` passes.
5. **Performance and camera polish.** Rack focus as keyed Manual Focus Distance (P6), camera moves as base plus offset plus shake layers (P7); Accumulation DOF only on DOF-centric shots. GATE: re-board; keyed focus equals subject distance; no pop at section boundaries.
6. **Lighting (with scenario-unreal-lighting-rendering).** Temp light renders unblock everyone; `C.lighting_masters(plan)`, render only those (`render_jobs(plan, only=...)`), director approval into `plan["lighting_approved"]`; then per-shot rim and kick lights in `_LGT`, lit through the viewport OCIO Display (P7b). GATE: `C.ready_for_final_lighting(plan)`; luminance continuity and approval against the masters; `stat unit` or an Insights trace if a shot is slow.
7. **Draft render and review.** The review graph or the 5.8 Basic config; `C.review_movie_cmd` with the music (P10). GATE: `C.check_render_output`, `C.first_frame_pop`, `C.cut_flash`, then watch it with sound.
8. **Final EXR.** Template graph per P8 with the `CineWrittenFiles` Execute Script (Editor Only); `C.audit_render_settings(C.normalize_graph_snapshot(C.graph_snapshot(graph)))`; `C.render_jobs(plan, sequences=C.active_shot_paths(master, plan))`, `C.render_orchestration`, then `C.render_generator` (executor held globally) or `C.mrq_command_line` per shot (always `-notexturestreaming`) (P9). GATE: settings audit pass; `C.check_manifest`, `C.exr_checks` per sampled frame; after a crash, re-render `C.shots_to_render(...)` whole.
9. **Deliver.** EXRs per shot, `C.edl(plan)`, review MP4, `C.delivery_note(plan, settings)` (Resolve interpretation), JSON reports; notes split technical or creative, three creative rounds, then a live session (Glitch [00:32:37] [00:33:40]) (P11).

## Numbers

| Item                       | Value                                                                                                                                     | Relative to, source                                                  |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| Hierarchical bias          | root 0, +100 per level, equal values blend                                                                                                | shots doc                                                            |
| Pre-roll                   | 24 to 48 frames on cloth, hair, particles in motion                                                                                       | digest; tips doc                                                     |
| Engine Warm Up, idle cloth | more than 30 frames                                                                                                                       | tips doc                                                             |
| Temporal samples           | Frame Close: 24 base (95% of Blur's shots), 48 fast, 64 very fast; Frame Center: odd (15, 25, 49, 65; Faucher: 15 to 31 covers 95 to 98%) | AAAhD5tEUBs [00:39:32] [00:40:05]; fVg5ihB8Wdc [00:06:01] [00:10:58] |
| AA method                  | None above 8 total samples                                                                                                                | MRG image quality doc                                                |
| Warm-up sampling           | only the last 5 warm-up frames are sampled                                                                                                | 5.6 and 5.8 notes                                                    |
| Linear vs viewport         | about 1 stop darker                                                                                                                       | 2Q3CybANHKE [00:09:39]                                               |
| Review MP4 video bitrate   | fps x 2 x 1000 kb/s (48,000 at 24 fps)                                                                                                    | 2Q3CybANHKE [00:22:54]                                               |
| Characters                 | under 200 joints                                                                                                                          | Glitch [00:05:33]                                                    |
| Master lighting            | 10 to 13 per 400-shot episode, 1 to 2 days each                                                                                           | Glitch [00:28:51]                                                    |

## Quality gates

- **Measurable:** `check_plan`, `ready_to_animate`, `ready_for_final_lighting` and `audit_sequence` without fail; `audit_render_settings` without fail or unanswered warn; frame counts with exclusive ends (`check_render_output`, `check_manifest`); EXR half, no NaN or Inf, not black, values above 1.0 in bright shots when linear, metadata present; `first_frame_pop` and `cut_flash` false; luminance jumps only where intended.
- **Visual:** contact sheets, isolated pre-roll frames, first frames, every cut, DOF edges on hair and occluders, fastest motion blur, lighting against the masters through the grade's OCIO view, the cut with music.

## Common mistakes

| Mistake                                                    | What it looks like                    | Fix                                                                     |
| ---------------------------------------------------------- | ------------------------------------- | ----------------------------------------------------------------------- |
| Duplicating the master to experiment                       | a change leaks into the "backup"      | New Take (`new_take`) inside the shot                                   |
| Characters and cameras possessable                         | breaks in another map                 | spawnables; `empty_level_test`                                          |
| Animating a set piece as a possessable                     | it snaps back after its shot          | key it where needed, or spawnable (`bind.override`)                     |
| Hiding actors with the Outliner eye                        | back after reopening                  | Levels panel or a Level Visibility track                                |
| Several skeletal meshes, one animation track               | parts do not follow                   | Set Leader Pose Component (`check_characters`)                          |
| Long Python tool, no progress                              | "frozen" editor killed mid-write      | `editor_tool`                                                           |
| Animating before timing is locked                          | work on frames that get cut           | board, stingers on cuts, `ready_to_animate`                             |
| Engine Warm Up for a running character                     | cloth snaps at frame one              | pre-roll plus camera-cut warm-up                                        |
| Expecting the last frame                                   | "missing" frame 50 of 0 to 50         | end is exclusive; count `end - start`                                   |
| Raising samples for noise                                  | time up, noise unchanged              | fix the light or post-process setting                                   |
| Even samples with Frame Center, mixed temporal and spatial | stepping, waste                       | odd temporal only (or 24 with Frame Close)                              |
| Lighting shot by shot, no masters                          | late creative changes                 | approved masters first                                                  |
| Lighting in the default viewport, rendering linear         | look shifts a stop                    | viewport OCIO Display                                                   |
| Linear EXRs sent with no interpretation                    | dark, odd colors in Resolve           | `delivery_note`                                                         |
| Editing the shared graph per shot                          | every job changes                     | exposed variables per job                                               |
| Overnight local queue, or a local executor                 | a crash loses the queue; render stops | farm manager or one process per shot; `shots_to_render`; `start_render` |
| Headless render without `-notexturestreaming`              | soft first frames                     | `mrq_command_line`                                                      |

## Handoffs

- **Receives** from scenario-unreal-lighting-rendering: the lit level (sky, fog, key, unbound PPV, exposure policy, master lighting as a sub-level or data layer), noise fixed at the source, lit masters for approval. From scenario-unreal-animation: Animation Sequences with lengths and rate, characters under 200 joints with Set Leader Pose Component on multi-mesh Blueprints, cloth or physics flags. From scenario-unreal-vfx: Niagara systems with user parameters and warm-up needs. From scenario-unreal-world-building: the map and its set pieces.
- **Delivers** to the editor and colorist: EXRs per shot (`{sequence_name}/{sequence_name}.####.exr`, linear, half, metadata), `<prod>.edl`, the delivery note, the review MP4, contact sheets, JSON reports, the master. To scenario-unreal-lighting-rendering: shots failing continuity or noise, with frames. Farm commands to scenario-unreal-pipeline-automation; slow shots to scenario-unreal-performance.

## UE 5.8 notes

- MRG is Production Ready, new features graph-only, the queue opens in a Basic config; new: Light Modifier, layer warm-ups, DWAA/DWAB EXR, Accumulation DOF (experimental plugin) (5.8 notes; VP [00:33:35]).
- In MRG, Game Overrides act only while connected; tone curve on the renderer node, OCIO on the output node; the Execute Script node needs Editor Only mode for Python (transition doc; 5.8 notes).
- Spawnables are custom bindings; create them with `LevelSequenceEditorSubsystem.add_spawnable_from_class`; no `add_master_track`; time functions take `MovieSceneTimeUnit` (seq-py doc; version deltas).
- Playback honors the selection range; Sensor Aspect Ratio is not animatable; Take Recorder and VCam accept spawnables; Sandboxes for experiments.
- OpenColorIO 2.5.1 with ACES 2.0: view names may differ from "ACES 1.0 SDR Video" [verify].
- Mac: the MRG H.264 node is Windows only (encode with ffmpeg); ProRes on Mac is conflicting [verify]; path tracing needs macOS 26.4+.

## References

- `references/procedures.md`: P0 to P11, full code, plan fields, the template graph spec (P8). Load before writing Sequencer or render code.
- [`references/expert-notes.md`](references/expert-notes.md): judgment per expert, timestamps, deciding conditions.
- [`references/critique.md`](references/critique.md): the rubric, mapped to code checks.
- [`references/gui-paths.md`](references/gui-paths.md): menus and settings for the same procedures.
- `references/sources.md`: sources, credentials, URLs, timestamps; revision history.
- `scripts/ue_cine.py` (toolkit; its docstring lists every call) and `scripts/cine_render_callbacks.py` (the Execute Script class).

Files in this skill

  • SKILL.md20 KB
  • references/critique.md24.5 KB
  • references/expert-notes.md16.1 KB
  • references/gui-paths.md10.5 KB
  • references/procedures.md38.9 KB
  • references/sources.md16.7 KB
  • scripts/cine_render_callbacks.py4.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.